{
  "contractName": "Finance",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "hasInitialized",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "CREATE_PAYMENTS_ROLE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_script",
          "type": "bytes"
        }
      ],
      "name": "getEVMScriptExecutor",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getRecoveryVault",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "CHANGE_PERIOD_ROLE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "CHANGE_BUDGETS_ROLE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "periodsLength",
      "outputs": [
        {
          "name": "",
          "type": "uint64"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "appId",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getInitializationBlock",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "EXECUTE_PAYMENTS_ROLE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "transferToVault",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_sender",
          "type": "address"
        },
        {
          "name": "_role",
          "type": "bytes32"
        },
        {
          "name": "_params",
          "type": "uint256[]"
        }
      ],
      "name": "canPerform",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getEVMScriptRegistry",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "kernel",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "paymentsNextIndex",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isPetrified",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "MANAGE_PAYMENTS_ROLE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "transactionsNextIndex",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "vault",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "payable": true,
      "stateMutability": "payable",
      "type": "fallback"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "periodId",
          "type": "uint64"
        },
        {
          "indexed": false,
          "name": "periodStarts",
          "type": "uint64"
        },
        {
          "indexed": false,
          "name": "periodEnds",
          "type": "uint64"
        }
      ],
      "name": "NewPeriod",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "hasBudget",
          "type": "bool"
        }
      ],
      "name": "SetBudget",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "paymentId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "maxRepeats",
          "type": "uint64"
        },
        {
          "indexed": false,
          "name": "reference",
          "type": "string"
        }
      ],
      "name": "NewPayment",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "transactionId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "incoming",
          "type": "bool"
        },
        {
          "indexed": true,
          "name": "entity",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "reference",
          "type": "string"
        }
      ],
      "name": "NewTransaction",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "paymentId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "inactive",
          "type": "bool"
        }
      ],
      "name": "ChangePaymentState",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "newDuration",
          "type": "uint64"
        }
      ],
      "name": "ChangePeriodDuration",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "paymentId",
          "type": "uint256"
        }
      ],
      "name": "PaymentFailure",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "executor",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "script",
          "type": "bytes"
        },
        {
          "indexed": false,
          "name": "input",
          "type": "bytes"
        },
        {
          "indexed": false,
          "name": "returnData",
          "type": "bytes"
        }
      ],
      "name": "ScriptResult",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_vault",
          "type": "address"
        },
        {
          "name": "_periodDuration",
          "type": "uint64"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_token",
          "type": "address"
        },
        {
          "name": "_amount",
          "type": "uint256"
        },
        {
          "name": "_reference",
          "type": "string"
        }
      ],
      "name": "deposit",
      "outputs": [],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_token",
          "type": "address"
        },
        {
          "name": "_receiver",
          "type": "address"
        },
        {
          "name": "_amount",
          "type": "uint256"
        },
        {
          "name": "_initialPaymentTime",
          "type": "uint64"
        },
        {
          "name": "_interval",
          "type": "uint64"
        },
        {
          "name": "_maxRepeats",
          "type": "uint64"
        },
        {
          "name": "_reference",
          "type": "string"
        }
      ],
      "name": "newPayment",
      "outputs": [
        {
          "name": "paymentId",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_periodDuration",
          "type": "uint64"
        }
      ],
      "name": "setPeriodDuration",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_token",
          "type": "address"
        },
        {
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "setBudget",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "removeBudget",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_paymentId",
          "type": "uint256"
        }
      ],
      "name": "executePayment",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_paymentId",
          "type": "uint256"
        }
      ],
      "name": "receiverExecutePayment",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_paymentId",
          "type": "uint256"
        },
        {
          "name": "_active",
          "type": "bool"
        }
      ],
      "name": "setPaymentStatus",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "recoverToVault",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_maxTransitions",
          "type": "uint64"
        }
      ],
      "name": "tryTransitionAccountingPeriod",
      "outputs": [
        {
          "name": "success",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "allowRecoverability",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_paymentId",
          "type": "uint256"
        }
      ],
      "name": "getPayment",
      "outputs": [
        {
          "name": "token",
          "type": "address"
        },
        {
          "name": "receiver",
          "type": "address"
        },
        {
          "name": "amount",
          "type": "uint256"
        },
        {
          "name": "initialPaymentTime",
          "type": "uint64"
        },
        {
          "name": "interval",
          "type": "uint64"
        },
        {
          "name": "maxRepeats",
          "type": "uint64"
        },
        {
          "name": "inactive",
          "type": "bool"
        },
        {
          "name": "repeats",
          "type": "uint64"
        },
        {
          "name": "createdBy",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_transactionId",
          "type": "uint256"
        }
      ],
      "name": "getTransaction",
      "outputs": [
        {
          "name": "periodId",
          "type": "uint64"
        },
        {
          "name": "amount",
          "type": "uint256"
        },
        {
          "name": "paymentId",
          "type": "uint256"
        },
        {
          "name": "paymentRepeatNumber",
          "type": "uint64"
        },
        {
          "name": "token",
          "type": "address"
        },
        {
          "name": "entity",
          "type": "address"
        },
        {
          "name": "isIncoming",
          "type": "bool"
        },
        {
          "name": "date",
          "type": "uint64"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_periodId",
          "type": "uint64"
        }
      ],
      "name": "getPeriod",
      "outputs": [
        {
          "name": "isCurrent",
          "type": "bool"
        },
        {
          "name": "startTime",
          "type": "uint64"
        },
        {
          "name": "endTime",
          "type": "uint64"
        },
        {
          "name": "firstTransactionId",
          "type": "uint256"
        },
        {
          "name": "lastTransactionId",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_periodId",
          "type": "uint64"
        },
        {
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "getPeriodTokenStatement",
      "outputs": [
        {
          "name": "expenses",
          "type": "uint256"
        },
        {
          "name": "income",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_paymentId",
          "type": "uint256"
        }
      ],
      "name": "nextPaymentTime",
      "outputs": [
        {
          "name": "",
          "type": "uint64"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getPeriodDuration",
      "outputs": [
        {
          "name": "",
          "type": "uint64"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "getBudget",
      "outputs": [
        {
          "name": "budget",
          "type": "uint256"
        },
        {
          "name": "hasBudget",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "getRemainingBudget",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "currentPeriodId",
      "outputs": [
        {
          "name": "",
          "type": "uint64"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040526200001d62000023640100000000026401000000009004565b62000309565b60006200003e6200015e640100000000026401000000009004565b146040805190810160405280601881526020017f494e49545f414c52454144595f494e495449414c495a4544000000000000000081525090151562000121576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620000e5578082015181840152602081019050620000c8565b50505050905090810190601f168015620001135780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506200015c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620001ab640100000000026401000000009004565b565b6000620001a67febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e60010260001916620002f7640100000000026200690f176401000000009004565b905090565b6000620001c66200015e640100000000026401000000009004565b146040805190810160405280601881526020017f494e49545f414c52454144595f494e495449414c495a45440000000000000000815250901515620002a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200026d57808201518184015260208101905062000250565b50505050905090810190601f1680156200029b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50620002f4817febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e60010260001916620003026401000000000262007151179091906401000000009004565b50565b600081549050919050565b8082555050565b6174bb80620003196000396000f3006080604052600436106101ee576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630803fac01461041a5780630842ace414610449578063162a0cf81461047c5780631798de81146104a957806318f053da1461050057806319b7d7bd146105435780632914b9bd146105a55780632d00cad31461064e5780633280a8361461068757806332f0a3b5146107d857806333ea3dc81461082f5780635985feec146109395780635b14dbc81461096c5780636436f1891461099f57806367047c4a146109cc578063671273f414610a5f5780636abe602d14610a965780636f0558b114610ad557806374bfb42614610baa5780637e7db6e114610bf757806380afdea814610c525780638b3dd74914610c855780639297d86014610cb0578063981cc34214610cf3578063988e659514610d265780639d4941d814610d65578063a1658fad14610da8578063a479e50814610e54578063a662944114610eab578063b36fec5714610efa578063bfe07da614610f39578063cb045a9614610f91578063d2d27b4114610fe6578063d4aae0c414611058578063de048a7b146110af578063de4796ed146110da578063e94ebac514611109578063eaa7ec681461113c578063eca8181714611167578063fbfa77cf146111be575b6101f6611215565b6040805190810160405280601481526020017f494e49545f4e4f545f494e495449414c495a45440000000000000000000000008152509015156102d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561029957808201518184015260208101905061027e565b50505050905090810190601f1680156102c65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060006102f16102e2611240565b67ffffffffffffffff16611268565b9050806040805190810160405280601b81526020017f46494e414e43455f434f4d504c4554455f5452414e534954494f4e00000000008152509015156103d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561039757808201518184015260208101905061037c565b50505050905090810190601f1680156103c45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506104176000346040805190810160405280601d81526020017f4574686572207472616e7366657220746f2046696e616e636520617070000000815250336001611382565b50005b34801561042657600080fd5b5061042f611215565b604051808215151515815260200191505060405180910390f35b34801561045557600080fd5b5061045e611a83565b60405180826000191660001916815260200191505060405180910390f35b34801561048857600080fd5b506104a760048036038101908080359060200190929190505050611abc565b005b3480156104b557600080fd5b506104fe600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803567ffffffffffffffff169060200190929190505050611f01565b005b34801561050c57600080fd5b50610541600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061228b565b005b34801561054f57600080fd5b50610584600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061265a565b60405180838152602001821515151581526020019250505060405180910390f35b3480156105b157600080fd5b5061060c600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506126f8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561065a57600080fd5b5061068560048036038101908080359060200190929190803515159060200190929190505050612817565b005b34801561069357600080fd5b506106b260048036038101908080359060200190929190505050612ab5565b604051808a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018767ffffffffffffffff1667ffffffffffffffff1681526020018667ffffffffffffffff1667ffffffffffffffff1681526020018567ffffffffffffffff1667ffffffffffffffff168152602001841515151581526020018367ffffffffffffffff1667ffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001995050505050505050505060405180910390f35b3480156107e457600080fd5b506107ed612cd5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561083b57600080fd5b5061085a60048036038101908080359060200190929190505050612d82565b604051808967ffffffffffffffff1667ffffffffffffffff1681526020018881526020018781526020018667ffffffffffffffff1667ffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001831515151581526020018267ffffffffffffffff1667ffffffffffffffff1681526020019850505050505050505060405180910390f35b34801561094557600080fd5b5061094e612f64565b60405180826000191660001916815260200191505060405180910390f35b34801561097857600080fd5b50610981612f9d565b60405180826000191660001916815260200191505060405180910390f35b3480156109ab57600080fd5b506109ca60048036038101908080359060200190929190505050612fd6565b005b3480156109d857600080fd5b50610a01600480360381019080803567ffffffffffffffff169060200190929190505050613504565b60405180861515151581526020018567ffffffffffffffff1667ffffffffffffffff1681526020018467ffffffffffffffff1667ffffffffffffffff1681526020018381526020018281526020019550505050505060405180910390f35b348015610a6b57600080fd5b50610a94600480360381019080803567ffffffffffffffff1690602001909291905050506136b2565b005b348015610aa257600080fd5b50610aab613a74565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b348015610ae157600080fd5b50610b94600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803567ffffffffffffffff169060200190929190803567ffffffffffffffff169060200190929190803567ffffffffffffffff169060200190929190803590602001908201803590602001919091929391929390505050613a8e565b6040518082815260200191505060405180910390f35b348015610bb657600080fd5b50610bf5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506141f6565b005b348015610c0357600080fd5b50610c38600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061461a565b604051808215151515815260200191505060405180910390f35b348015610c5e57600080fd5b50610c6761462c565b60405180826000191660001916815260200191505060405180910390f35b348015610c9157600080fd5b50610c9a614663565b6040518082815260200191505060405180910390f35b348015610cbc57600080fd5b50610cf1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061469a565b005b348015610cff57600080fd5b50610d08614ad6565b60405180826000191660001916815260200191505060405180910390f35b348015610d3257600080fd5b50610d3b614b0f565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b348015610d7157600080fd5b50610da6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614c05565b005b348015610db457600080fd5b50610e3a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560001916906020019092919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050615037565b604051808215151515815260200191505060405180910390f35b348015610e6057600080fd5b50610e6961523e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610eb757600080fd5b50610ee0600480360381019080803567ffffffffffffffff169060200190929190505050615359565b604051808215151515815260200191505060405180910390f35b348015610f0657600080fd5b50610f0f61545c565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b610f8f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190820180359060200191909192939192939050505061547d565b005b348015610f9d57600080fd5b50610fbc600480360381019080803590602001909291905050506156a9565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b348015610ff257600080fd5b5061103b600480360381019080803567ffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050615a5e565b604051808381526020018281526020019250505060405180910390f35b34801561106457600080fd5b5061106d615bf0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156110bb57600080fd5b506110c4615c27565b6040518082815260200191505060405180910390f35b3480156110e657600080fd5b506110ef615c2d565b604051808215151515815260200191505060405180910390f35b34801561111557600080fd5b5061111e615c5e565b60405180826000191660001916815260200191505060405180910390f35b34801561114857600080fd5b50611151615c97565b6040518082815260200191505060405180910390f35b34801561117357600080fd5b506111a8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050615c9d565b6040518082815260200191505060405180910390f35b3480156111ca57600080fd5b506111d3615d96565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600080611220614663565b90506000811415801561123a575080611237615dbb565b10155b91505090565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905090565b600080600060086000611279615dc3565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002091506112a5615de4565b90505b8160000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff168167ffffffffffffffff1611156113765760008414156112ee576000925061137b565b611302600185615dfb90919063ffffffff16565b935060008260010154141515611331576113286001600754615dfb90919063ffffffff16565b82600201819055505b61136f61136a60018460000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff16615ef090919063ffffffff16565b615ff9565b91506112a8565b600192505b5050919050565b600084116040805190810160405280601b81526020017f46494e414e43455f4445504f5349545f414d4f554e545f5a45524f0000000000815250901515611464576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561142957808201518184015260208101905061140e565b50505050905090810190601f1680156114565780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50611471858386866161d3565b801561178757600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415156116a3578473ffffffffffffffffffffffffffffffffffffffff166323b872dd3330876040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561158457600080fd5b505af1158015611598573d6000803e3d6000fd5b505050506040513d60208110156115ae57600080fd5b81019080805190602001909291905050506040805190810160405280602081526020017f46494e414e43455f544b4e5f5452414e534645525f46524f4d5f52455645525481525090151561169d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611662578082015181840152602081019050611647565b50505050905090810190601f16801561168f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50611786565b8334146040805190810160405280601681526020017f46494e414e43455f56414c55455f4d49534d4154434800000000000000000000815250901515611784576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561174957808201518184015260208101905061172e565b50505050905090810190601f1680156117765780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561189f576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166347e7ef24856000876040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506000604051808303818588803b15801561188157600080fd5b505af1158015611895573d6000803e3d6000fd5b5050505050611a7c565b8473ffffffffffffffffffffffffffffffffffffffff1663095ea7b36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561196357600080fd5b505af1158015611977573d6000803e3d6000fd5b505050506040513d602081101561198d57600080fd5b8101908080519060200190929190505050506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166347e7ef2486866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611a6357600080fd5b505af1158015611a77573d6000803e3d6000fd5b505050505b5050505050565b60405180807f4352454154455f5041594d454e54535f524f4c450000000000000000000000008152506014019050604051809103902081565b60405180807f455845435554455f5041594d454e54535f524f4c45000000000000000000000081525060150190506040518091039020611b128260046000858152602001908152602001600020600301546161ea565b611b1d338383615037565b6040805190810160405280600f81526020017f4150505f415554485f4641494c45440000000000000000000000000000000000815250901515611bfb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611bc0578082015181840152602081019050611ba5565b50505050905090810190601f168015611bed5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082600081118015611c0e575060055481105b6040805190810160405280601281526020017f46494e414e43455f4e4f5f5041594d454e540000000000000000000000000000815250901515611cec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611cb1578082015181840152602081019050611c96565b50505050905090810190601f168015611cde5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000611d09611cfa611240565b67ffffffffffffffff16611268565b9050806040805190810160405280601b81526020017f46494e414e43455f434f4d504c4554455f5452414e534954494f4e0000000000815250901515611dea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611daf578082015181840152602081019050611d94565b50505050905090810190601f168015611ddc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50611df3615de4565b67ffffffffffffffff16611e06866156a9565b67ffffffffffffffff1611156040805190810160405280601c81526020017f46494e414e43455f455845435554455f5041594d454e545f54494d4500000000815250901515611ef0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611eb5578082015181840152602081019050611e9a565b50505050905090810190601f168015611ee25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50611efa85616261565b5050505050565b6000611f0b614663565b146040805190810160405280601881526020017f494e49545f414c52454144595f494e495449414c495a45440000000000000000815250901515611fea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611faf578082015181840152602081019050611f94565b50505050905090810190601f168015611fdc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50611ff36164fe565b611ffc8261662b565b6040805190810160405280601a81526020017f46494e414e43455f5641554c545f4e4f545f434f4e54524143540000000000008152509015156120da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561209f578082015181840152602081019050612084565b50505050905090810190601f1680156120cc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620151808167ffffffffffffffff1610156040805190810160405280601d81526020017f46494e414e43455f494e49545f504552494f445f544f4f5f53484f525400000081525090151561220a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156121cf5780820151818401526020810190506121b4565b50505050905090810190601f1680156121fc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5080600160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060016004600080815260200190815260200160002060020160146101000a81548160ff02191690831515021790555060016005819055506001600781905550612286612281615de4565b615ff9565b505050565b60405180807f4348414e47455f425544474554535f524f4c45000000000000000000000000008152506013019050604051809103902061236f8260006001800160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600160020160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612364576000612367565b60015b60ff1661667d565b61237a338383615037565b6040805190810160405280600f81526020017f4150505f415554485f4641494c45440000000000000000000000000000000000815250901515612458576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561241d578082015181840152602081019050612402565b50505050905090810190601f16801561244a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000612475612466611240565b67ffffffffffffffff16611268565b9050806040805190810160405280601b81526020017f46494e414e43455f434f4d504c4554455f5452414e534954494f4e0000000000815250901515612556576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561251b578082015181840152602081019050612500565b50505050905090810190601f1680156125485780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060006001800160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600160020160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508373ffffffffffffffffffffffffffffffffffffffff167f6e768d8fe4a1460cae6d5af9382c3e9abbc41f66f2ec91fda24b12e3c2796f0360008060405180838152602001821515151581526020019250505060405180910390a250505050565b6000806001800160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549150600160020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050915091565b600061270261523e565b73ffffffffffffffffffffffffffffffffffffffff166304bf2a7f836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561278957808201518184015260208101905061276e565b50505050905090810190601f1680156127b65780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b1580156127d557600080fd5b505af11580156127e9573d6000803e3d6000fd5b505050506040513d60208110156127ff57600080fd5b81019080805190602001909291905050509050919050565b60405180807f4d414e4147455f5041594d454e54535f524f4c4500000000000000000000000081525060140190506040518091039020612868838361285d576000612860565b60015b60ff166161ea565b612873338383615037565b6040805190810160405280600f81526020017f4150505f415554485f4641494c45440000000000000000000000000000000000815250901515612951576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156129165780820151818401526020810190506128fb565b50505050905090810190601f1680156129435780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5083600081118015612964575060055481105b6040805190810160405280601281526020017f46494e414e43455f4e4f5f5041594d454e540000000000000000000000000000815250901515612a42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612a075780820151818401526020810190506129ec565b50505050905090810190601f168015612a345780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5083156004600087815260200190815260200160002060020160146101000a81548160ff021916908315150217905550847faca91836ee6e44bf1c422f7ee89afb243a4fb775d9fe87150ff5f8e566dc161285604051808215151515815260200191505060405180910390a25050505050565b6000806000806000806000806000808a600081118015612ad6575060055481105b6040805190810160405280601281526020017f46494e414e43455f4e4f5f5041594d454e540000000000000000000000000000815250901515612bb4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612b79578082015181840152602081019050612b5e565b50505050905090810190601f168015612ba65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600460008d815260200190815260200160002091508160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169a508160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169950816003015498508160040160009054906101000a900467ffffffffffffffff1697508160040160089054906101000a900467ffffffffffffffff1696508160040160109054906101000a900467ffffffffffffffff1695508160040160189054906101000a900467ffffffffffffffff1693508160020160149054906101000a900460ff1694508160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16925050509193959799909294969850565b6000612cdf615bf0565b73ffffffffffffffffffffffffffffffffffffffff166332f0a3b56040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015612d4257600080fd5b505af1158015612d56573d6000803e3d6000fd5b505050506040513d6020811015612d6c57600080fd5b8101908080519060200190929190505050905090565b600080600080600080600080600089600081118015612da2575060075481105b6040805190810160405280601681526020017f46494e414e43455f4e4f5f5452414e53414354494f4e00000000000000000000815250901515612e80576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612e45578082015181840152602081019050612e2a565b50505050905090810190601f168015612e725780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600660008c815260200190815260200160002091508160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1695508160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1694508160010160149054906101000a900460ff1693508160040160089054906101000a900467ffffffffffffffff1692508160040160109054906101000a900467ffffffffffffffff16995081600201549850816003015497508160040160009054906101000a900467ffffffffffffffff1696505050919395975091939597565b60405180807f4348414e47455f504552494f445f524f4c4500000000000000000000000000008152506012019050604051809103902081565b60405180807f4348414e47455f425544474554535f524f4c45000000000000000000000000008152506013019050604051809103902081565b612fde611215565b6040805190810160405280601481526020017f494e49545f4e4f545f494e495449414c495a45440000000000000000000000008152509015156130bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613081578082015181840152602081019050613066565b50505050905090810190601f1680156130ae5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50806000811180156130cf575060055481105b6040805190810160405280601281526020017f46494e414e43455f4e4f5f5041594d454e5400000000000000000000000000008152509015156131ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613172578082015181840152602081019050613157565b50505050905090810190601f16801561319f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060006131ca6131bb611240565b67ffffffffffffffff16611268565b9050806040805190810160405280601b81526020017f46494e414e43455f434f4d504c4554455f5452414e534954494f4e00000000008152509015156132ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613270578082015181840152602081019050613255565b50505050905090810190601f16801561329d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506132b4615de4565b67ffffffffffffffff166132c7846156a9565b67ffffffffffffffff1611156040805190810160405280601e81526020017f46494e414e43455f524356525f455845435f5041594d454e545f54494d4500008152509015156133b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561337657808201518184015260208101905061335b565b50505050905090810190601f1680156133a35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b503373ffffffffffffffffffffffffffffffffffffffff166004600085815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601881526020017f46494e414e43455f5041594d454e545f524543454956455200000000000000008152509015156134f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156134ba57808201518184015260208101905061349f565b50505050905090810190601f1680156134e75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506134ff83616261565b505050565b60008060008060008086600960009054906101000a900467ffffffffffffffff1667ffffffffffffffff168167ffffffffffffffff16106040805190810160405280601181526020017f46494e414e43455f4e4f5f504552494f44000000000000000000000000000000815250901515613619576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156135de5780820151818401526020810190506135c3565b50505050905090810190601f16801561360b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600860008967ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002091508767ffffffffffffffff16613656615dc3565b67ffffffffffffffff161496508160000160009054906101000a900467ffffffffffffffff1695508160000160089054906101000a900467ffffffffffffffff1694508160010154935081600201549250505091939590929450565b60405180807f4348414e47455f504552494f445f524f4c4500000000000000000000000000008152506012019050604051809103902061371f8267ffffffffffffffff16600160000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff166161ea565b61372a338383615037565b6040805190810160405280600f81526020017f4150505f415554485f4641494c45440000000000000000000000000000000000815250901515613808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156137cd5780820151818401526020810190506137b2565b50505050905090810190601f1680156137fa5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000613825613816611240565b67ffffffffffffffff16611268565b9050806040805190810160405280601b81526020017f46494e414e43455f434f4d504c4554455f5452414e534954494f4e0000000000815250901515613906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156138cb5780820151818401526020810190506138b0565b50505050905090810190601f1680156138f85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50620151808467ffffffffffffffff1610156040805190810160405280601c81526020017f46494e414e43455f5345545f504552494f445f544f4f5f53484f5254000000008152509015156139f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156139bb5780820151818401526020810190506139a0565b50505050905090810190601f1680156139e85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5083600160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fa32389dd0d5a3bf7cc635f8c30fee3b70d06a6c547d6dbf31628378ee267bfc984604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390a150505050565b600960009054906101000a900467ffffffffffffffff1681565b60008060405180807f4352454154455f5041594d454e54535f524f4c4500000000000000000000000081525060140190506040518091039020613ae88b8b8b8a67ffffffffffffffff168a67ffffffffffffffff166166ab565b613af3338383615037565b6040805190810160405280600f81526020017f4150505f415554485f4641494c45440000000000000000000000000000000000815250901515613bd1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613b96578082015181840152602081019050613b7b565b50505050905090810190601f168015613bc35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000613bee613bdf611240565b67ffffffffffffffff16611268565b9050806040805190810160405280601b81526020017f46494e414e43455f434f4d504c4554455f5452414e534954494f4e0000000000815250901515613ccf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613c94578082015181840152602081019050613c79565b50505050905090810190601f168015613cc15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008b116040805190810160405280601f81526020017f46494e414e43455f4e45575f5041594d454e545f414d4f554e545f5a45524f00815250901515613db2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613d77578082015181840152602081019050613d5c565b50505050905090810190601f168015613da45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50613dbb615de4565b67ffffffffffffffff168a67ffffffffffffffff1611158015613de8575060018867ffffffffffffffff16145b15613e3357613e2e8d8d8d6000808c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050506166f1565b6141e6565b8a6001800160008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580613ed05750600160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6040805190810160405280600e81526020017f46494e414e43455f425544474554000000000000000000000000000000000000815250901515613fae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613f73578082015181840152602081019050613f58565b50505050905090810190601f168015613fa05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600560008154809291906001019190505594508b73ffffffffffffffffffffffffffffffffffffffff16857f41e8c14bdf2b044354d788d944b364e1de0b64aeddeba755b8ef69ab68bd90838a8a8a604051808467ffffffffffffffff1667ffffffffffffffff168152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a36004600086815260200190815260200160002093508c8460000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b8460010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508a8460030181905550898460040160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550888460040160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550878460040160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550338460020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506141b7615de4565b67ffffffffffffffff166141ca866156a9565b67ffffffffffffffff161115156141e5576141e485616261565b5b5b5050505098975050505050505050565b60405180807f4348414e47455f425544474554535f524f4c4500000000000000000000000000815250601301905060405180910390206142d983836001800160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600160020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166142ce5760006142d1565b60015b60ff1661667d565b6142e4338383615037565b6040805190810160405280600f81526020017f4150505f415554485f4641494c454400000000000000000000000000000000008152509015156143c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561438757808201518184015260208101905061436c565b50505050905090810190601f1680156143b45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060006143df6143d0611240565b67ffffffffffffffff16611268565b9050806040805190810160405280601b81526020017f46494e414e43455f434f4d504c4554455f5452414e534954494f4e00000000008152509015156144c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561448557808201518184015260208101905061446a565b50505050905090810190601f1680156144b25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50836001800160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160020160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156145b85760018060020160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8473ffffffffffffffffffffffffffffffffffffffff167f6e768d8fe4a1460cae6d5af9382c3e9abbc41f66f2ec91fda24b12e3c2796f0385600160405180838152602001821515151581526020019250505060405180910390a25050505050565b6000614624611215565b159050919050565b600061465e7fd625496217aa6a3453eecb9c3489dc5a53e6c67b444329ea2b2cbc9ff547639b60010260001916616904565b905090565b60006146957febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e6001026000191661690f565b905090565b60006146a4611215565b6040805190810160405280601481526020017f494e49545f4e4f545f494e495449414c495a4544000000000000000000000000815250901515614782576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561474757808201518184015260208101905061472c565b50505050905090810190601f1680156147745780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600061479f614790611240565b67ffffffffffffffff16611268565b9050806040805190810160405280601b81526020017f46494e414e43455f434f4d504c4554455f5452414e534954494f4e0000000000815250901515614880576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561484557808201518184015260208101905061482a565b50505050905090810190601f1680156148725780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614614990578273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561495057600080fd5b505af1158015614964573d6000803e3d6000fd5b505050506040513d602081101561497a57600080fd5b81019080805190602001909291905050506149a9565b3073ffffffffffffffffffffffffffffffffffffffff16315b9150600082116040805190810160405280601b81526020017f46494e414e43455f5245434f5645525f414d4f554e545f5a45524f0000000000815250901515614a8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614a52578082015181840152602081019050614a37565b50505050905090810190601f168015614a7f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50614ad183836040805190810160405280601081526020017f5265636f76657220746f205661756c7400000000000000000000000000000000815250306000611382565b505050565b60405180807f455845435554455f5041594d454e54535f524f4c4500000000000000000000008152506015019050604051809103902081565b6000614b19611215565b6040805190810160405280601481526020017f494e49545f4e4f545f494e495449414c495a4544000000000000000000000000815250901515614bf7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614bbc578082015181840152602081019050614ba1565b50505050905090810190601f168015614be95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50614c00615dc3565b905090565b600080614c118361461a565b6040805190810160405280601281526020017f5245434f5645525f444953414c4c4f5745440000000000000000000000000000815250901515614cef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614cb4578082015181840152602081019050614c99565b50505050905090810190601f168015614ce15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50614cf8612cd5565b9150614d038261662b565b6040805190810160405280601a81526020017f5245434f5645525f5641554c545f4e4f545f434f4e5452414354000000000000815250901515614de1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614da6578082015181840152602081019050614d8b565b50505050905090810190601f168015614dd35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614e7a578173ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015614e74573d6000803e3d6000fd5b50615032565b8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015614f1557600080fd5b505af1158015614f29573d6000803e3d6000fd5b505050506040513d6020811015614f3f57600080fd5b810190808051906020019092919050505090508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015614ff557600080fd5b505af1158015615009573d6000803e3d6000fd5b505050506040513d602081101561501f57600080fd5b8101908080519060200190929190505050505b505050565b60008060606000615046611215565b15156150555760009350615234565b61505d615bf0565b9250600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561509d5760009350615234565b602085510290508491508082528273ffffffffffffffffffffffffffffffffffffffff1663fdef9106883089866040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001836000191660001916815260200180602001828103825283818151815260200191508051906020019080838360005b838110156151a757808201518184015260208101905061518c565b50505050905090810190601f1680156151d45780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1580156151f657600080fd5b505af115801561520a573d6000803e3d6000fd5b505050506040513d602081101561522057600080fd5b810190808051906020019092919050505093505b5050509392505050565b600080615249615bf0565b73ffffffffffffffffffffffffffffffffffffffff1663be00bbd87fd6f028ca0e8edb4a8c9757ca4fdccab25fa1e0317da1188108f7d2dee14902fb6001027fddbcfd564f642ab5627cf68b9b7d374fb4f8a36e941a75d89c87998cef03bd616001026040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808360001916600019168152602001826000191660001916815260200192505050602060405180830381600087803b15801561531557600080fd5b505af1158015615329573d6000803e3d6000fd5b505050506040513d602081101561533f57600080fd5b810190808051906020019092919050505090508091505090565b6000615363611215565b6040805190810160405280601481526020017f494e49545f4e4f545f494e495449414c495a4544000000000000000000000000815250901515615441576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156154065780820151818401526020810190506153eb565b50505050905090810190601f1680156154335780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506154558267ffffffffffffffff16611268565b9050919050565b6000600160000160009054906101000a900467ffffffffffffffff16905090565b615485611215565b6040805190810160405280601481526020017f494e49545f4e4f545f494e495449414c495a4544000000000000000000000000815250901515615563576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561552857808201518184015260208101905061550d565b50505050905090810190601f1680156155555780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000615580615571611240565b67ffffffffffffffff16611268565b9050806040805190810160405280601b81526020017f46494e414e43455f434f4d504c4554455f5452414e534954494f4e0000000000815250901515615661576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561562657808201518184015260208101905061560b565b50505050905090810190601f1680156156535780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506156a2858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050336001611382565b5050505050565b60006156b36173d6565b600080846000811180156156c8575060055481105b6040805190810160405280601281526020017f46494e414e43455f4e4f5f5041594d454e5400000000000000000000000000008152509015156157a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561576b578082015181840152602081019050615750565b50505050905090810190601f1680156157985780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506004600087815260200190815260200160002061012060405190810160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160149054906101000a900460ff16151515158152602001600382015481526020016004820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016004820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016004820160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016004820160189054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505093508360e0015167ffffffffffffffff1684610100015167ffffffffffffffff16101515615a06577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9450615a55565b615a2c8460c0015185610100015167ffffffffffffffff1661691a90919063ffffffff16565b9250615a4f838560a0015167ffffffffffffffff16615ef090919063ffffffff16565b91508194505b50505050919050565b600080600084600960009054906101000a900467ffffffffffffffff1667ffffffffffffffff168167ffffffffffffffff16106040805190810160405280601181526020017f46494e414e43455f4e4f5f504552494f44000000000000000000000000000000815250901515615b6f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615b34578082015181840152602081019050615b19565b50505050905090810190601f168015615b615780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600860008767ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060030160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209150816000015493508160010154925050509250929050565b6000615c227f4172f0f7d2289153072b0a6ca36959e0cbe2efc3afe50fc81636caa96338137b60010260001916616a2b565b905090565b60055481565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff615c58614663565b14905090565b60405180807f4d414e4147455f5041594d454e54535f524f4c450000000000000000000000008152506014019050604051809103902081565b60075481565b6000615ca7611215565b6040805190810160405280601481526020017f494e49545f4e4f545f494e495449414c495a4544000000000000000000000000815250901515615d85576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615d4a578082015181840152602081019050615d2f565b50505050905090810190601f168015615d775780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50615d8f82616a36565b9050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600043905090565b60006001600960009054906101000a900467ffffffffffffffff1603905090565b6000615df6615df1616bdb565b616be3565b905090565b600080838311156040805190810160405280601281526020017f4d4154485f5355425f554e444552464c4f570000000000000000000000000000815250901515615ee0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615ea5578082015181840152602081019050615e8a565b50505050905090810190601f168015615ed25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082840390508091505092915050565b60008082840190508367ffffffffffffffff168167ffffffffffffffff1610156040805190810160405280601381526020017f4d41544836345f4144445f4f564552464c4f5700000000000000000000000000815250901515615fee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615fb3578082015181840152602081019050615f98565b50505050905090810190601f168015615fe05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508091505092915050565b6000806000806009600081819054906101000a900467ffffffffffffffff168092919060010191906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509250600860008467ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000209150848260000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060018060000160009054906101000a900467ffffffffffffffff1686010390508467ffffffffffffffff168167ffffffffffffffff1610156160fb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90505b808260000160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508267ffffffffffffffff167fe183df4530c4b573af76d47f020d4b86e418cef40ed4c9ce924b563e791b832c8360000160009054906101000a900467ffffffffffffffff168460000160089054906101000a900467ffffffffffffffff16604051808367ffffffffffffffff1667ffffffffffffffff1681526020018267ffffffffffffffff1667ffffffffffffffff1681526020019250505060405180910390a2819350505050919050565b6161e4600185858560008087616cfa565b50505050565b6060600260405190808252806020026020018201604052801561621c5781602001602082028038833980820191505090505b5090508281600081518110151561622f57fe5b90602001906020020181815250508181600181518110151561624d57fe5b906020019060200201818152505092915050565b6000806004600084815260200190815260200160002091508160020160149054906101000a900460ff16156040805190810160405280601881526020017f46494e414e43455f5041594d454e545f494e414354495645000000000000000081525090151561636a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561632f578082015181840152602081019050616314565b50505050905090810190601f16801561635c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600090505b616378615de4565b67ffffffffffffffff1661638b846156a9565b67ffffffffffffffff16111580156163ad575060148167ffffffffffffffff16105b156164f8576163e48260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360030154617039565b1515616426577f5f352e4123f4620cacbb8eb0dd683705aaa3e1f9384adbbd85b665b205097f51836040518082815260200191505060405180910390a16164f9565b60018260040160188282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001810190506164f38260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460030154868660040160189054906101000a900467ffffffffffffffff1660206040519081016040528060008152506166f1565b616370565b5b505050565b6000616508614663565b146040805190810160405280601881526020017f494e49545f414c52454144595f494e495449414c495a454400000000000000008152509015156165e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156165ac578082015181840152602081019050616591565b50505050905090810190601f1680156165d95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506166296165f3615dbb565b7febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e6001026000191661715190919063ffffffff16565b565b600080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561666c5760009150616677565b823b90506000811191505b50919050565b60606166a18573ffffffffffffffffffffffffffffffffffffffff16858585617158565b9050949350505050565b60606166e68673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1686868661720d565b905095945050505050565b836166fb87616a36565b10156040805190810160405280601881526020017f46494e414e43455f52454d41494e494e475f42554447455400000000000000008152509015156167db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156167a0578082015181840152602081019050616785565b50505050905090810190601f1680156167cd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506167ec6000878787878787616cfa565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663beabacc88787876040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156168e457600080fd5b505af11580156168f8573d6000803e3d6000fd5b50505050505050505050565b600081549050919050565b600081549050919050565b6000808267ffffffffffffffff168467ffffffffffffffff160290506801000000000000000081106040805190810160405280601381526020017f4d41544836345f4d554c5f4f564552464c4f5700000000000000000000000000815250901515616a20576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156169e55780820151818401526020810190506169ca565b50505050905090810190601f168015616a125780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508091505092915050565b600081549050919050565b600080600160020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515616ab7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9150616bd5565b60086000616ac3615dc3565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490506001800160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481101515616b7e5760009150616bd5565b616bd2816001800160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054615dfb90919063ffffffff16565b91505b50919050565b600042905090565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff168211156040805190810160405280601581526020017f55494e5436345f4e554d4245525f544f4f5f4249470000000000000000000000815250901515616cf1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015616cb6578082015181840152602081019050616c9b565b50505050905090810190601f168015616ce35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50819050919050565b6000806000806000616d0a615dc3565b9450600860008667ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060030160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002093508b15616d9f57616d928985600101546172e190919063ffffffff16565b8460010181905550616dbf565b616db68985600001546172e190919063ffffffff16565b84600001819055505b600760008154809291906001019190505592506006600084815260200190815260200160002091508a8260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550898260010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b8260010160146101000a81548160ff021916908315150217905550888260020181905550878260030181905550868260040160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550616ece615de4565b8260040160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550848260040160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600860008667ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000209050600081600101541415616f63578281600101819055505b8973ffffffffffffffffffffffffffffffffffffffff16837f5b2c6f4cb53711ae51d600df17fa68f8239b4a704f766c99642f667d1d7bd40e8e8c8a604051808415151515815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015616fef578082015181840152602081019050616fd4565b50505050905090810190601f16801561701c5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a3505050505050505050505050565b60008161704584616a36565b101580156171495750816000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3d670d7856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561710b57600080fd5b505af115801561711f573d6000803e3d6000fd5b505050506040513d602081101561713557600080fd5b810190808051906020019092919050505010155b905092915050565b8082555050565b6060600460405190808252806020026020018201604052801561718a5781602001602082028038833980820191505090505b5090508481600081518110151561719d57fe5b9060200190602002018181525050838160018151811015156171bb57fe5b9060200190602002018181525050828160028151811015156171d957fe5b9060200190602002018181525050818160038151811015156171f757fe5b9060200190602002018181525050949350505050565b6060600560405190808252806020026020018201604052801561723f5781602001602082028038833980820191505090505b5090508581600081518110151561725257fe5b90602001906020020181815250508481600181518110151561727057fe5b90602001906020020181815250508381600281518110151561728e57fe5b9060200190602002018181525050828160038151811015156172ac57fe5b9060200190602002018181525050818160048151811015156172ca57fe5b906020019060200201818152505095945050505050565b6000808284019050838110156040805190810160405280601181526020017f4d4154485f4144445f4f564552464c4f570000000000000000000000000000008152509015156173cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015617390578082015181840152602081019050617375565b50505050905090810190601f1680156173bd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508091505092915050565b61012060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160001515815260200160008152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff16815250905600a165627a7a723058206e31d7c54339cc83b9ec8db70483620bf154eeece59137a49b72a95f560003320029",
  "deployedBytecode": "0x6080604052600436106101ee576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630803fac01461041a5780630842ace414610449578063162a0cf81461047c5780631798de81146104a957806318f053da1461050057806319b7d7bd146105435780632914b9bd146105a55780632d00cad31461064e5780633280a8361461068757806332f0a3b5146107d857806333ea3dc81461082f5780635985feec146109395780635b14dbc81461096c5780636436f1891461099f57806367047c4a146109cc578063671273f414610a5f5780636abe602d14610a965780636f0558b114610ad557806374bfb42614610baa5780637e7db6e114610bf757806380afdea814610c525780638b3dd74914610c855780639297d86014610cb0578063981cc34214610cf3578063988e659514610d265780639d4941d814610d65578063a1658fad14610da8578063a479e50814610e54578063a662944114610eab578063b36fec5714610efa578063bfe07da614610f39578063cb045a9614610f91578063d2d27b4114610fe6578063d4aae0c414611058578063de048a7b146110af578063de4796ed146110da578063e94ebac514611109578063eaa7ec681461113c578063eca8181714611167578063fbfa77cf146111be575b6101f6611215565b6040805190810160405280601481526020017f494e49545f4e4f545f494e495449414c495a45440000000000000000000000008152509015156102d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561029957808201518184015260208101905061027e565b50505050905090810190601f1680156102c65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060006102f16102e2611240565b67ffffffffffffffff16611268565b9050806040805190810160405280601b81526020017f46494e414e43455f434f4d504c4554455f5452414e534954494f4e00000000008152509015156103d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561039757808201518184015260208101905061037c565b50505050905090810190601f1680156103c45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506104176000346040805190810160405280601d81526020017f4574686572207472616e7366657220746f2046696e616e636520617070000000815250336001611382565b50005b34801561042657600080fd5b5061042f611215565b604051808215151515815260200191505060405180910390f35b34801561045557600080fd5b5061045e611a83565b60405180826000191660001916815260200191505060405180910390f35b34801561048857600080fd5b506104a760048036038101908080359060200190929190505050611abc565b005b3480156104b557600080fd5b506104fe600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803567ffffffffffffffff169060200190929190505050611f01565b005b34801561050c57600080fd5b50610541600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061228b565b005b34801561054f57600080fd5b50610584600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061265a565b60405180838152602001821515151581526020019250505060405180910390f35b3480156105b157600080fd5b5061060c600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506126f8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561065a57600080fd5b5061068560048036038101908080359060200190929190803515159060200190929190505050612817565b005b34801561069357600080fd5b506106b260048036038101908080359060200190929190505050612ab5565b604051808a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018767ffffffffffffffff1667ffffffffffffffff1681526020018667ffffffffffffffff1667ffffffffffffffff1681526020018567ffffffffffffffff1667ffffffffffffffff168152602001841515151581526020018367ffffffffffffffff1667ffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001995050505050505050505060405180910390f35b3480156107e457600080fd5b506107ed612cd5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561083b57600080fd5b5061085a60048036038101908080359060200190929190505050612d82565b604051808967ffffffffffffffff1667ffffffffffffffff1681526020018881526020018781526020018667ffffffffffffffff1667ffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001831515151581526020018267ffffffffffffffff1667ffffffffffffffff1681526020019850505050505050505060405180910390f35b34801561094557600080fd5b5061094e612f64565b60405180826000191660001916815260200191505060405180910390f35b34801561097857600080fd5b50610981612f9d565b60405180826000191660001916815260200191505060405180910390f35b3480156109ab57600080fd5b506109ca60048036038101908080359060200190929190505050612fd6565b005b3480156109d857600080fd5b50610a01600480360381019080803567ffffffffffffffff169060200190929190505050613504565b60405180861515151581526020018567ffffffffffffffff1667ffffffffffffffff1681526020018467ffffffffffffffff1667ffffffffffffffff1681526020018381526020018281526020019550505050505060405180910390f35b348015610a6b57600080fd5b50610a94600480360381019080803567ffffffffffffffff1690602001909291905050506136b2565b005b348015610aa257600080fd5b50610aab613a74565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b348015610ae157600080fd5b50610b94600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803567ffffffffffffffff169060200190929190803567ffffffffffffffff169060200190929190803567ffffffffffffffff169060200190929190803590602001908201803590602001919091929391929390505050613a8e565b6040518082815260200191505060405180910390f35b348015610bb657600080fd5b50610bf5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506141f6565b005b348015610c0357600080fd5b50610c38600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061461a565b604051808215151515815260200191505060405180910390f35b348015610c5e57600080fd5b50610c6761462c565b60405180826000191660001916815260200191505060405180910390f35b348015610c9157600080fd5b50610c9a614663565b6040518082815260200191505060405180910390f35b348015610cbc57600080fd5b50610cf1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061469a565b005b348015610cff57600080fd5b50610d08614ad6565b60405180826000191660001916815260200191505060405180910390f35b348015610d3257600080fd5b50610d3b614b0f565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b348015610d7157600080fd5b50610da6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614c05565b005b348015610db457600080fd5b50610e3a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560001916906020019092919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050615037565b604051808215151515815260200191505060405180910390f35b348015610e6057600080fd5b50610e6961523e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610eb757600080fd5b50610ee0600480360381019080803567ffffffffffffffff169060200190929190505050615359565b604051808215151515815260200191505060405180910390f35b348015610f0657600080fd5b50610f0f61545c565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b610f8f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190820180359060200191909192939192939050505061547d565b005b348015610f9d57600080fd5b50610fbc600480360381019080803590602001909291905050506156a9565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b348015610ff257600080fd5b5061103b600480360381019080803567ffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050615a5e565b604051808381526020018281526020019250505060405180910390f35b34801561106457600080fd5b5061106d615bf0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156110bb57600080fd5b506110c4615c27565b6040518082815260200191505060405180910390f35b3480156110e657600080fd5b506110ef615c2d565b604051808215151515815260200191505060405180910390f35b34801561111557600080fd5b5061111e615c5e565b60405180826000191660001916815260200191505060405180910390f35b34801561114857600080fd5b50611151615c97565b6040518082815260200191505060405180910390f35b34801561117357600080fd5b506111a8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050615c9d565b6040518082815260200191505060405180910390f35b3480156111ca57600080fd5b506111d3615d96565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600080611220614663565b90506000811415801561123a575080611237615dbb565b10155b91505090565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905090565b600080600060086000611279615dc3565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002091506112a5615de4565b90505b8160000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff168167ffffffffffffffff1611156113765760008414156112ee576000925061137b565b611302600185615dfb90919063ffffffff16565b935060008260010154141515611331576113286001600754615dfb90919063ffffffff16565b82600201819055505b61136f61136a60018460000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff16615ef090919063ffffffff16565b615ff9565b91506112a8565b600192505b5050919050565b600084116040805190810160405280601b81526020017f46494e414e43455f4445504f5349545f414d4f554e545f5a45524f0000000000815250901515611464576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561142957808201518184015260208101905061140e565b50505050905090810190601f1680156114565780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50611471858386866161d3565b801561178757600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415156116a3578473ffffffffffffffffffffffffffffffffffffffff166323b872dd3330876040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561158457600080fd5b505af1158015611598573d6000803e3d6000fd5b505050506040513d60208110156115ae57600080fd5b81019080805190602001909291905050506040805190810160405280602081526020017f46494e414e43455f544b4e5f5452414e534645525f46524f4d5f52455645525481525090151561169d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611662578082015181840152602081019050611647565b50505050905090810190601f16801561168f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50611786565b8334146040805190810160405280601681526020017f46494e414e43455f56414c55455f4d49534d4154434800000000000000000000815250901515611784576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561174957808201518184015260208101905061172e565b50505050905090810190601f1680156117765780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561189f576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166347e7ef24856000876040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506000604051808303818588803b15801561188157600080fd5b505af1158015611895573d6000803e3d6000fd5b5050505050611a7c565b8473ffffffffffffffffffffffffffffffffffffffff1663095ea7b36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561196357600080fd5b505af1158015611977573d6000803e3d6000fd5b505050506040513d602081101561198d57600080fd5b8101908080519060200190929190505050506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166347e7ef2486866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611a6357600080fd5b505af1158015611a77573d6000803e3d6000fd5b505050505b5050505050565b60405180807f4352454154455f5041594d454e54535f524f4c450000000000000000000000008152506014019050604051809103902081565b60405180807f455845435554455f5041594d454e54535f524f4c45000000000000000000000081525060150190506040518091039020611b128260046000858152602001908152602001600020600301546161ea565b611b1d338383615037565b6040805190810160405280600f81526020017f4150505f415554485f4641494c45440000000000000000000000000000000000815250901515611bfb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611bc0578082015181840152602081019050611ba5565b50505050905090810190601f168015611bed5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082600081118015611c0e575060055481105b6040805190810160405280601281526020017f46494e414e43455f4e4f5f5041594d454e540000000000000000000000000000815250901515611cec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611cb1578082015181840152602081019050611c96565b50505050905090810190601f168015611cde5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000611d09611cfa611240565b67ffffffffffffffff16611268565b9050806040805190810160405280601b81526020017f46494e414e43455f434f4d504c4554455f5452414e534954494f4e0000000000815250901515611dea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611daf578082015181840152602081019050611d94565b50505050905090810190601f168015611ddc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50611df3615de4565b67ffffffffffffffff16611e06866156a9565b67ffffffffffffffff1611156040805190810160405280601c81526020017f46494e414e43455f455845435554455f5041594d454e545f54494d4500000000815250901515611ef0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611eb5578082015181840152602081019050611e9a565b50505050905090810190601f168015611ee25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50611efa85616261565b5050505050565b6000611f0b614663565b146040805190810160405280601881526020017f494e49545f414c52454144595f494e495449414c495a45440000000000000000815250901515611fea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611faf578082015181840152602081019050611f94565b50505050905090810190601f168015611fdc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50611ff36164fe565b611ffc8261662b565b6040805190810160405280601a81526020017f46494e414e43455f5641554c545f4e4f545f434f4e54524143540000000000008152509015156120da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561209f578082015181840152602081019050612084565b50505050905090810190601f1680156120cc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620151808167ffffffffffffffff1610156040805190810160405280601d81526020017f46494e414e43455f494e49545f504552494f445f544f4f5f53484f525400000081525090151561220a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156121cf5780820151818401526020810190506121b4565b50505050905090810190601f1680156121fc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5080600160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060016004600080815260200190815260200160002060020160146101000a81548160ff02191690831515021790555060016005819055506001600781905550612286612281615de4565b615ff9565b505050565b60405180807f4348414e47455f425544474554535f524f4c45000000000000000000000000008152506013019050604051809103902061236f8260006001800160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600160020160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612364576000612367565b60015b60ff1661667d565b61237a338383615037565b6040805190810160405280600f81526020017f4150505f415554485f4641494c45440000000000000000000000000000000000815250901515612458576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561241d578082015181840152602081019050612402565b50505050905090810190601f16801561244a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000612475612466611240565b67ffffffffffffffff16611268565b9050806040805190810160405280601b81526020017f46494e414e43455f434f4d504c4554455f5452414e534954494f4e0000000000815250901515612556576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561251b578082015181840152602081019050612500565b50505050905090810190601f1680156125485780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060006001800160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600160020160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508373ffffffffffffffffffffffffffffffffffffffff167f6e768d8fe4a1460cae6d5af9382c3e9abbc41f66f2ec91fda24b12e3c2796f0360008060405180838152602001821515151581526020019250505060405180910390a250505050565b6000806001800160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549150600160020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050915091565b600061270261523e565b73ffffffffffffffffffffffffffffffffffffffff166304bf2a7f836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561278957808201518184015260208101905061276e565b50505050905090810190601f1680156127b65780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b1580156127d557600080fd5b505af11580156127e9573d6000803e3d6000fd5b505050506040513d60208110156127ff57600080fd5b81019080805190602001909291905050509050919050565b60405180807f4d414e4147455f5041594d454e54535f524f4c4500000000000000000000000081525060140190506040518091039020612868838361285d576000612860565b60015b60ff166161ea565b612873338383615037565b6040805190810160405280600f81526020017f4150505f415554485f4641494c45440000000000000000000000000000000000815250901515612951576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156129165780820151818401526020810190506128fb565b50505050905090810190601f1680156129435780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5083600081118015612964575060055481105b6040805190810160405280601281526020017f46494e414e43455f4e4f5f5041594d454e540000000000000000000000000000815250901515612a42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612a075780820151818401526020810190506129ec565b50505050905090810190601f168015612a345780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5083156004600087815260200190815260200160002060020160146101000a81548160ff021916908315150217905550847faca91836ee6e44bf1c422f7ee89afb243a4fb775d9fe87150ff5f8e566dc161285604051808215151515815260200191505060405180910390a25050505050565b6000806000806000806000806000808a600081118015612ad6575060055481105b6040805190810160405280601281526020017f46494e414e43455f4e4f5f5041594d454e540000000000000000000000000000815250901515612bb4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612b79578082015181840152602081019050612b5e565b50505050905090810190601f168015612ba65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600460008d815260200190815260200160002091508160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169a508160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169950816003015498508160040160009054906101000a900467ffffffffffffffff1697508160040160089054906101000a900467ffffffffffffffff1696508160040160109054906101000a900467ffffffffffffffff1695508160040160189054906101000a900467ffffffffffffffff1693508160020160149054906101000a900460ff1694508160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16925050509193959799909294969850565b6000612cdf615bf0565b73ffffffffffffffffffffffffffffffffffffffff166332f0a3b56040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015612d4257600080fd5b505af1158015612d56573d6000803e3d6000fd5b505050506040513d6020811015612d6c57600080fd5b8101908080519060200190929190505050905090565b600080600080600080600080600089600081118015612da2575060075481105b6040805190810160405280601681526020017f46494e414e43455f4e4f5f5452414e53414354494f4e00000000000000000000815250901515612e80576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612e45578082015181840152602081019050612e2a565b50505050905090810190601f168015612e725780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600660008c815260200190815260200160002091508160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1695508160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1694508160010160149054906101000a900460ff1693508160040160089054906101000a900467ffffffffffffffff1692508160040160109054906101000a900467ffffffffffffffff16995081600201549850816003015497508160040160009054906101000a900467ffffffffffffffff1696505050919395975091939597565b60405180807f4348414e47455f504552494f445f524f4c4500000000000000000000000000008152506012019050604051809103902081565b60405180807f4348414e47455f425544474554535f524f4c45000000000000000000000000008152506013019050604051809103902081565b612fde611215565b6040805190810160405280601481526020017f494e49545f4e4f545f494e495449414c495a45440000000000000000000000008152509015156130bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613081578082015181840152602081019050613066565b50505050905090810190601f1680156130ae5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50806000811180156130cf575060055481105b6040805190810160405280601281526020017f46494e414e43455f4e4f5f5041594d454e5400000000000000000000000000008152509015156131ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613172578082015181840152602081019050613157565b50505050905090810190601f16801561319f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060006131ca6131bb611240565b67ffffffffffffffff16611268565b9050806040805190810160405280601b81526020017f46494e414e43455f434f4d504c4554455f5452414e534954494f4e00000000008152509015156132ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613270578082015181840152602081019050613255565b50505050905090810190601f16801561329d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506132b4615de4565b67ffffffffffffffff166132c7846156a9565b67ffffffffffffffff1611156040805190810160405280601e81526020017f46494e414e43455f524356525f455845435f5041594d454e545f54494d4500008152509015156133b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561337657808201518184015260208101905061335b565b50505050905090810190601f1680156133a35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b503373ffffffffffffffffffffffffffffffffffffffff166004600085815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601881526020017f46494e414e43455f5041594d454e545f524543454956455200000000000000008152509015156134f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156134ba57808201518184015260208101905061349f565b50505050905090810190601f1680156134e75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506134ff83616261565b505050565b60008060008060008086600960009054906101000a900467ffffffffffffffff1667ffffffffffffffff168167ffffffffffffffff16106040805190810160405280601181526020017f46494e414e43455f4e4f5f504552494f44000000000000000000000000000000815250901515613619576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156135de5780820151818401526020810190506135c3565b50505050905090810190601f16801561360b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600860008967ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002091508767ffffffffffffffff16613656615dc3565b67ffffffffffffffff161496508160000160009054906101000a900467ffffffffffffffff1695508160000160089054906101000a900467ffffffffffffffff1694508160010154935081600201549250505091939590929450565b60405180807f4348414e47455f504552494f445f524f4c4500000000000000000000000000008152506012019050604051809103902061371f8267ffffffffffffffff16600160000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff166161ea565b61372a338383615037565b6040805190810160405280600f81526020017f4150505f415554485f4641494c45440000000000000000000000000000000000815250901515613808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156137cd5780820151818401526020810190506137b2565b50505050905090810190601f1680156137fa5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000613825613816611240565b67ffffffffffffffff16611268565b9050806040805190810160405280601b81526020017f46494e414e43455f434f4d504c4554455f5452414e534954494f4e0000000000815250901515613906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156138cb5780820151818401526020810190506138b0565b50505050905090810190601f1680156138f85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50620151808467ffffffffffffffff1610156040805190810160405280601c81526020017f46494e414e43455f5345545f504552494f445f544f4f5f53484f5254000000008152509015156139f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156139bb5780820151818401526020810190506139a0565b50505050905090810190601f1680156139e85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5083600160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fa32389dd0d5a3bf7cc635f8c30fee3b70d06a6c547d6dbf31628378ee267bfc984604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390a150505050565b600960009054906101000a900467ffffffffffffffff1681565b60008060405180807f4352454154455f5041594d454e54535f524f4c4500000000000000000000000081525060140190506040518091039020613ae88b8b8b8a67ffffffffffffffff168a67ffffffffffffffff166166ab565b613af3338383615037565b6040805190810160405280600f81526020017f4150505f415554485f4641494c45440000000000000000000000000000000000815250901515613bd1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613b96578082015181840152602081019050613b7b565b50505050905090810190601f168015613bc35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000613bee613bdf611240565b67ffffffffffffffff16611268565b9050806040805190810160405280601b81526020017f46494e414e43455f434f4d504c4554455f5452414e534954494f4e0000000000815250901515613ccf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613c94578082015181840152602081019050613c79565b50505050905090810190601f168015613cc15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008b116040805190810160405280601f81526020017f46494e414e43455f4e45575f5041594d454e545f414d4f554e545f5a45524f00815250901515613db2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613d77578082015181840152602081019050613d5c565b50505050905090810190601f168015613da45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50613dbb615de4565b67ffffffffffffffff168a67ffffffffffffffff1611158015613de8575060018867ffffffffffffffff16145b15613e3357613e2e8d8d8d6000808c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050506166f1565b6141e6565b8a6001800160008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580613ed05750600160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6040805190810160405280600e81526020017f46494e414e43455f425544474554000000000000000000000000000000000000815250901515613fae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613f73578082015181840152602081019050613f58565b50505050905090810190601f168015613fa05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600560008154809291906001019190505594508b73ffffffffffffffffffffffffffffffffffffffff16857f41e8c14bdf2b044354d788d944b364e1de0b64aeddeba755b8ef69ab68bd90838a8a8a604051808467ffffffffffffffff1667ffffffffffffffff168152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a36004600086815260200190815260200160002093508c8460000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b8460010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508a8460030181905550898460040160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550888460040160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550878460040160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550338460020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506141b7615de4565b67ffffffffffffffff166141ca866156a9565b67ffffffffffffffff161115156141e5576141e485616261565b5b5b5050505098975050505050505050565b60405180807f4348414e47455f425544474554535f524f4c4500000000000000000000000000815250601301905060405180910390206142d983836001800160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600160020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166142ce5760006142d1565b60015b60ff1661667d565b6142e4338383615037565b6040805190810160405280600f81526020017f4150505f415554485f4641494c454400000000000000000000000000000000008152509015156143c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561438757808201518184015260208101905061436c565b50505050905090810190601f1680156143b45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060006143df6143d0611240565b67ffffffffffffffff16611268565b9050806040805190810160405280601b81526020017f46494e414e43455f434f4d504c4554455f5452414e534954494f4e00000000008152509015156144c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561448557808201518184015260208101905061446a565b50505050905090810190601f1680156144b25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50836001800160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160020160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156145b85760018060020160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8473ffffffffffffffffffffffffffffffffffffffff167f6e768d8fe4a1460cae6d5af9382c3e9abbc41f66f2ec91fda24b12e3c2796f0385600160405180838152602001821515151581526020019250505060405180910390a25050505050565b6000614624611215565b159050919050565b600061465e7fd625496217aa6a3453eecb9c3489dc5a53e6c67b444329ea2b2cbc9ff547639b60010260001916616904565b905090565b60006146957febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e6001026000191661690f565b905090565b60006146a4611215565b6040805190810160405280601481526020017f494e49545f4e4f545f494e495449414c495a4544000000000000000000000000815250901515614782576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561474757808201518184015260208101905061472c565b50505050905090810190601f1680156147745780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600061479f614790611240565b67ffffffffffffffff16611268565b9050806040805190810160405280601b81526020017f46494e414e43455f434f4d504c4554455f5452414e534954494f4e0000000000815250901515614880576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561484557808201518184015260208101905061482a565b50505050905090810190601f1680156148725780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614614990578273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561495057600080fd5b505af1158015614964573d6000803e3d6000fd5b505050506040513d602081101561497a57600080fd5b81019080805190602001909291905050506149a9565b3073ffffffffffffffffffffffffffffffffffffffff16315b9150600082116040805190810160405280601b81526020017f46494e414e43455f5245434f5645525f414d4f554e545f5a45524f0000000000815250901515614a8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614a52578082015181840152602081019050614a37565b50505050905090810190601f168015614a7f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50614ad183836040805190810160405280601081526020017f5265636f76657220746f205661756c7400000000000000000000000000000000815250306000611382565b505050565b60405180807f455845435554455f5041594d454e54535f524f4c4500000000000000000000008152506015019050604051809103902081565b6000614b19611215565b6040805190810160405280601481526020017f494e49545f4e4f545f494e495449414c495a4544000000000000000000000000815250901515614bf7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614bbc578082015181840152602081019050614ba1565b50505050905090810190601f168015614be95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50614c00615dc3565b905090565b600080614c118361461a565b6040805190810160405280601281526020017f5245434f5645525f444953414c4c4f5745440000000000000000000000000000815250901515614cef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614cb4578082015181840152602081019050614c99565b50505050905090810190601f168015614ce15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50614cf8612cd5565b9150614d038261662b565b6040805190810160405280601a81526020017f5245434f5645525f5641554c545f4e4f545f434f4e5452414354000000000000815250901515614de1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614da6578082015181840152602081019050614d8b565b50505050905090810190601f168015614dd35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614e7a578173ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015614e74573d6000803e3d6000fd5b50615032565b8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015614f1557600080fd5b505af1158015614f29573d6000803e3d6000fd5b505050506040513d6020811015614f3f57600080fd5b810190808051906020019092919050505090508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015614ff557600080fd5b505af1158015615009573d6000803e3d6000fd5b505050506040513d602081101561501f57600080fd5b8101908080519060200190929190505050505b505050565b60008060606000615046611215565b15156150555760009350615234565b61505d615bf0565b9250600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561509d5760009350615234565b602085510290508491508082528273ffffffffffffffffffffffffffffffffffffffff1663fdef9106883089866040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001836000191660001916815260200180602001828103825283818151815260200191508051906020019080838360005b838110156151a757808201518184015260208101905061518c565b50505050905090810190601f1680156151d45780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1580156151f657600080fd5b505af115801561520a573d6000803e3d6000fd5b505050506040513d602081101561522057600080fd5b810190808051906020019092919050505093505b5050509392505050565b600080615249615bf0565b73ffffffffffffffffffffffffffffffffffffffff1663be00bbd87fd6f028ca0e8edb4a8c9757ca4fdccab25fa1e0317da1188108f7d2dee14902fb6001027fddbcfd564f642ab5627cf68b9b7d374fb4f8a36e941a75d89c87998cef03bd616001026040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808360001916600019168152602001826000191660001916815260200192505050602060405180830381600087803b15801561531557600080fd5b505af1158015615329573d6000803e3d6000fd5b505050506040513d602081101561533f57600080fd5b810190808051906020019092919050505090508091505090565b6000615363611215565b6040805190810160405280601481526020017f494e49545f4e4f545f494e495449414c495a4544000000000000000000000000815250901515615441576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156154065780820151818401526020810190506153eb565b50505050905090810190601f1680156154335780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506154558267ffffffffffffffff16611268565b9050919050565b6000600160000160009054906101000a900467ffffffffffffffff16905090565b615485611215565b6040805190810160405280601481526020017f494e49545f4e4f545f494e495449414c495a4544000000000000000000000000815250901515615563576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561552857808201518184015260208101905061550d565b50505050905090810190601f1680156155555780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000615580615571611240565b67ffffffffffffffff16611268565b9050806040805190810160405280601b81526020017f46494e414e43455f434f4d504c4554455f5452414e534954494f4e0000000000815250901515615661576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561562657808201518184015260208101905061560b565b50505050905090810190601f1680156156535780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506156a2858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050336001611382565b5050505050565b60006156b36173d6565b600080846000811180156156c8575060055481105b6040805190810160405280601281526020017f46494e414e43455f4e4f5f5041594d454e5400000000000000000000000000008152509015156157a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561576b578082015181840152602081019050615750565b50505050905090810190601f1680156157985780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506004600087815260200190815260200160002061012060405190810160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160149054906101000a900460ff16151515158152602001600382015481526020016004820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016004820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016004820160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016004820160189054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505093508360e0015167ffffffffffffffff1684610100015167ffffffffffffffff16101515615a06577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9450615a55565b615a2c8460c0015185610100015167ffffffffffffffff1661691a90919063ffffffff16565b9250615a4f838560a0015167ffffffffffffffff16615ef090919063ffffffff16565b91508194505b50505050919050565b600080600084600960009054906101000a900467ffffffffffffffff1667ffffffffffffffff168167ffffffffffffffff16106040805190810160405280601181526020017f46494e414e43455f4e4f5f504552494f44000000000000000000000000000000815250901515615b6f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615b34578082015181840152602081019050615b19565b50505050905090810190601f168015615b615780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600860008767ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060030160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209150816000015493508160010154925050509250929050565b6000615c227f4172f0f7d2289153072b0a6ca36959e0cbe2efc3afe50fc81636caa96338137b60010260001916616a2b565b905090565b60055481565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff615c58614663565b14905090565b60405180807f4d414e4147455f5041594d454e54535f524f4c450000000000000000000000008152506014019050604051809103902081565b60075481565b6000615ca7611215565b6040805190810160405280601481526020017f494e49545f4e4f545f494e495449414c495a4544000000000000000000000000815250901515615d85576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615d4a578082015181840152602081019050615d2f565b50505050905090810190601f168015615d775780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50615d8f82616a36565b9050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600043905090565b60006001600960009054906101000a900467ffffffffffffffff1603905090565b6000615df6615df1616bdb565b616be3565b905090565b600080838311156040805190810160405280601281526020017f4d4154485f5355425f554e444552464c4f570000000000000000000000000000815250901515615ee0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615ea5578082015181840152602081019050615e8a565b50505050905090810190601f168015615ed25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082840390508091505092915050565b60008082840190508367ffffffffffffffff168167ffffffffffffffff1610156040805190810160405280601381526020017f4d41544836345f4144445f4f564552464c4f5700000000000000000000000000815250901515615fee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615fb3578082015181840152602081019050615f98565b50505050905090810190601f168015615fe05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508091505092915050565b6000806000806009600081819054906101000a900467ffffffffffffffff168092919060010191906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509250600860008467ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000209150848260000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060018060000160009054906101000a900467ffffffffffffffff1686010390508467ffffffffffffffff168167ffffffffffffffff1610156160fb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90505b808260000160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508267ffffffffffffffff167fe183df4530c4b573af76d47f020d4b86e418cef40ed4c9ce924b563e791b832c8360000160009054906101000a900467ffffffffffffffff168460000160089054906101000a900467ffffffffffffffff16604051808367ffffffffffffffff1667ffffffffffffffff1681526020018267ffffffffffffffff1667ffffffffffffffff1681526020019250505060405180910390a2819350505050919050565b6161e4600185858560008087616cfa565b50505050565b6060600260405190808252806020026020018201604052801561621c5781602001602082028038833980820191505090505b5090508281600081518110151561622f57fe5b90602001906020020181815250508181600181518110151561624d57fe5b906020019060200201818152505092915050565b6000806004600084815260200190815260200160002091508160020160149054906101000a900460ff16156040805190810160405280601881526020017f46494e414e43455f5041594d454e545f494e414354495645000000000000000081525090151561636a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561632f578082015181840152602081019050616314565b50505050905090810190601f16801561635c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600090505b616378615de4565b67ffffffffffffffff1661638b846156a9565b67ffffffffffffffff16111580156163ad575060148167ffffffffffffffff16105b156164f8576163e48260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360030154617039565b1515616426577f5f352e4123f4620cacbb8eb0dd683705aaa3e1f9384adbbd85b665b205097f51836040518082815260200191505060405180910390a16164f9565b60018260040160188282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001810190506164f38260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460030154868660040160189054906101000a900467ffffffffffffffff1660206040519081016040528060008152506166f1565b616370565b5b505050565b6000616508614663565b146040805190810160405280601881526020017f494e49545f414c52454144595f494e495449414c495a454400000000000000008152509015156165e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156165ac578082015181840152602081019050616591565b50505050905090810190601f1680156165d95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506166296165f3615dbb565b7febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e6001026000191661715190919063ffffffff16565b565b600080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561666c5760009150616677565b823b90506000811191505b50919050565b60606166a18573ffffffffffffffffffffffffffffffffffffffff16858585617158565b9050949350505050565b60606166e68673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1686868661720d565b905095945050505050565b836166fb87616a36565b10156040805190810160405280601881526020017f46494e414e43455f52454d41494e494e475f42554447455400000000000000008152509015156167db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156167a0578082015181840152602081019050616785565b50505050905090810190601f1680156167cd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506167ec6000878787878787616cfa565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663beabacc88787876040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156168e457600080fd5b505af11580156168f8573d6000803e3d6000fd5b50505050505050505050565b600081549050919050565b600081549050919050565b6000808267ffffffffffffffff168467ffffffffffffffff160290506801000000000000000081106040805190810160405280601381526020017f4d41544836345f4d554c5f4f564552464c4f5700000000000000000000000000815250901515616a20576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156169e55780820151818401526020810190506169ca565b50505050905090810190601f168015616a125780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508091505092915050565b600081549050919050565b600080600160020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515616ab7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9150616bd5565b60086000616ac3615dc3565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490506001800160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481101515616b7e5760009150616bd5565b616bd2816001800160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054615dfb90919063ffffffff16565b91505b50919050565b600042905090565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff168211156040805190810160405280601581526020017f55494e5436345f4e554d4245525f544f4f5f4249470000000000000000000000815250901515616cf1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015616cb6578082015181840152602081019050616c9b565b50505050905090810190601f168015616ce35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50819050919050565b6000806000806000616d0a615dc3565b9450600860008667ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060030160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002093508b15616d9f57616d928985600101546172e190919063ffffffff16565b8460010181905550616dbf565b616db68985600001546172e190919063ffffffff16565b84600001819055505b600760008154809291906001019190505592506006600084815260200190815260200160002091508a8260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550898260010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b8260010160146101000a81548160ff021916908315150217905550888260020181905550878260030181905550868260040160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550616ece615de4565b8260040160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550848260040160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600860008667ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000209050600081600101541415616f63578281600101819055505b8973ffffffffffffffffffffffffffffffffffffffff16837f5b2c6f4cb53711ae51d600df17fa68f8239b4a704f766c99642f667d1d7bd40e8e8c8a604051808415151515815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015616fef578082015181840152602081019050616fd4565b50505050905090810190601f16801561701c5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a3505050505050505050505050565b60008161704584616a36565b101580156171495750816000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3d670d7856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561710b57600080fd5b505af115801561711f573d6000803e3d6000fd5b505050506040513d602081101561713557600080fd5b810190808051906020019092919050505010155b905092915050565b8082555050565b6060600460405190808252806020026020018201604052801561718a5781602001602082028038833980820191505090505b5090508481600081518110151561719d57fe5b9060200190602002018181525050838160018151811015156171bb57fe5b9060200190602002018181525050828160028151811015156171d957fe5b9060200190602002018181525050818160038151811015156171f757fe5b9060200190602002018181525050949350505050565b6060600560405190808252806020026020018201604052801561723f5781602001602082028038833980820191505090505b5090508581600081518110151561725257fe5b90602001906020020181815250508481600181518110151561727057fe5b90602001906020020181815250508381600281518110151561728e57fe5b9060200190602002018181525050828160038151811015156172ac57fe5b9060200190602002018181525050818160048151811015156172ca57fe5b906020019060200201818152505095945050505050565b6000808284019050838110156040805190810160405280601181526020017f4d4154485f4144445f4f564552464c4f570000000000000000000000000000008152509015156173cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015617390578082015181840152602081019050617375565b50505050905090810190601f1680156173bd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508091505092915050565b61012060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160001515815260200160008152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff16815250905600a165627a7a723058206e31d7c54339cc83b9ec8db70483620bf154eeece59137a49b72a95f560003320029",
  "sourceMap": "458:26473:3:-;;;344:9:19;:7;;;:9;;;:::i;:::-;458:26473:3;;590:84:28;651:1:26;623:24;:22;;;:24;;;:::i;:::-;:29;654:25;;;;;;;;;;;;;;;;;;615:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;615:65:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;637:30:28;277:2;637:13;;;:30;;;:::i;:::-;590:84::o;889:137:26:-;944:7;970:49;353:66;970:29;;:47;;;;;;;;:49;;;:::i;:::-;963:56;;889:137;:::o;1759:141::-;651:1;623:24;:22;;;:24;;;:::i;:::-;:29;654:25;;;;;;;;;;;;;;;;;;615:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;615:65:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1832:61;1880:12;353:66;1832:29;;:47;;;;;;;;;:61;;;;;:::i;:::-;1759:141;:::o;519:134:31:-;587:12;636:8;630:15;622:23;;620:27;;;:::o;1028:119::-;1134:4;1124:8;1117:22;1115:26;;:::o;458:26473:3:-;;;;;;;",
  "deployedSourceMap": "458:26473:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;745:16:26;:14;:16::i;:::-;763:21;;;;;;;;;;;;;;;;;;737:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;737:48:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5178:23:3;5204:57;5235:25;:23;:25::i;:::-;5204:57;;:30;:57::i;:::-;5178:83;;5279:18;5299:25;;;;;;;;;;;;;;;;;;5271:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5271:54:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6045:145;269:1:23;6084:9:3;6045:145;;;;;;;;;;;;;;;;;;6152:10;6176:4;6045:8;:145::i;:::-;795:1:26;458:26473:3;1136:208:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1136:208:26;;;;;;;;;;;;;;;;;;;;;;;;;;;592:80:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;592:80:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11982:347;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11982:347:3;;;;;;;;;;;;;;;;;;;;;;;;;;6476:709;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6476:709:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11476:338;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11476:338:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;18868:186;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18868:186:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;733:179:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;733:179:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13364:305:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13364:305:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15600:814;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15600:814:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2466:229:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2466:229:18;;;;;;;;;;;;;;;;;;;;;;;;;;;16420:800:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16420:800:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;678:76;;8:9:-1;5:2;;;30:1;27;20:12;5:2;678:76:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;760:78;;8:9:-1;5:2;;;30:1;27;20:12;5:2;760:78:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12517:353;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12517:353:3;;;;;;;;;;;;;;;;;;;;;;;;;;17226:589;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17226:589:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10293:379;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10293:379:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;4321:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4321:27:3;;;;;;;;;;;;;;;;;;;;;;;;;;;8390:1698;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8390:1698:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10890:438;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10890:438:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15488:106;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15488:106:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;796::17;;8:9:-1;5:2;;;30:1;27;20:12;5:2;796:106:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;889:137:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;889:137:26;;;;;;;;;;;;;;;;;;;;;;;14082:376:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14082:376:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;844:82;;8:9:-1;5:2;;;30:1;27;20:12;5:2;844:82:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19419:112;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19419:112:3;;;;;;;;;;;;;;;;;;;;;;;;;;;687:446:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;687:446:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;1524:826:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1524:826:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;918:231:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;918:231:34;;;;;;;;;;;;;;;;;;;;;;;;;;;15012:178:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15012:178:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18757:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18757:105:3;;;;;;;;;;;;;;;;;;;;;;;;;;;7445:260;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18191:560;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18191:560:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17821:364;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17821:364:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;674:116:17;;8:9:-1;5:2;;;30:1;27;20:12;5:2;674:116:17;;;;;;;;;;;;;;;;;;;;;;;;;;;4130:32:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4130:32:3;;;;;;;;;;;;;;;;;;;;;;;287:117:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;287:117:28;;;;;;;;;;;;;;;;;;;;;;;;;;;932:80:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;932:80:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4229:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4229:36:3;;;;;;;;;;;;;;;;;;;;;;;19167:139;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19167:139:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3800:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3800:18:3;;;;;;;;;;;;;;;;;;;;;;;;;;;1136:208:26;1183:4;1199:27;1229:24;:22;:24::i;:::-;1199:54;;1293:1;1270:19;:24;;:67;;;;;1318:19;1298:16;:14;:16::i;:::-;:39;;1270:67;1263:74;;1136:208;;:::o;26841:88:3:-;26899:6;1270:2;26909:17;;26841:88;:::o;24786:1073::-;24869:12;24893:28;24961:16;24924:7;:27;24932:18;:16;:18::i;:::-;24924:27;;;;;;;;;;;;;;;24893:58;;24980:16;:14;:16::i;:::-;24961:35;;25050:781;25069:13;:21;;;;;;;;;;;;25057:33;;:9;:33;;;25050:781;;;25129:1;25110:15;:20;25106:215;;;25301:5;25294:12;;;;25106:215;25352:22;25372:1;25352:15;:19;;:22;;;;:::i;:::-;25334:40;;1108:1;25554:13;:32;;;:50;;25550:151;;;25658:28;25684:1;25658:21;;:25;;:28;;;;:::i;:::-;25624:13;:31;;:62;;;;25550:151;25780:40;25791:28;25817:1;25791:13;:21;;;;;;;;;;;;:25;;;;:28;;;;:::i;:::-;25780:10;:40::i;:::-;25764:56;;25050:781;;;25848:4;25841:11;;24786:1073;;;;;;:::o;19558:1243::-;19707:1;19697:7;:11;19710:25;;;;;;;;;;;;;;;;;;19689:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;19689:47:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19746:122;19786:6;19806:7;19827;19848:10;19746:26;:122::i;:::-;20117:18;20113:431;;;269:1:23;20155:13:3;;:6;:13;;;;20151:383;;;20247:6;20241:26;;;20268:10;20280:4;20286:7;20241:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20241:53:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20241:53:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20241:53:3;;;;;;;;;;;;;;;;20296:34;;;;;;;;;;;;;;;;;;20233:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;20233:98:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20151:383;;;20489:7;20476:9;:20;20498;;;;;;;;;;;;;;;;;;20468:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;20468:51:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20151:383;20113:431;269:1:23;20558:13:3;;:6;:13;;;20554:241;;;20587:5;;;;;;;;;;;:13;;;20607:7;269:1:23;20621:7:3;20587:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20587:42:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20587:42:3;;;;;20554:241;;;20666:6;20660:21;;;20682:5;;;;;;;;;;;20689:7;20660:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20660:37:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20660:37:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20660:37:3;;;;;;;;;;;;;;;;;20754:5;;;;;;;;;;;:13;;;20768:6;20776:7;20754:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20754:30:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20754:30:3;;;;20554:241;19558:1243;;;;;:::o;592:80::-;639:33;;;;;;;;;;;;;;;;;;;592:80;:::o;11982:347::-;892:34;;;;;;;;;;;;;;;;;;;12080:44;12084:10;12096:8;:20;12105:10;12096:20;;;;;;;;;;;:27;;;12080:3;:44::i;:::-;1031:38:18;1042:10;1054:5;1061:7;1031:10;:38::i;:::-;1071:17;;;;;;;;;;;;;;;;;;1023:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1023:66:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12148:10:3;5423:1;5410:10;:14;:48;;;;;5441:17;;5428:10;:30;5410:48;5460:16;;;;;;;;;;;;;;;;;;5402:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5402:75:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5178:23;5204:57;5235:25;:23;:25::i;:::-;5204:57;;:30;:57::i;:::-;5178:83;;5279:18;5299:25;;;;;;;;;;;;;;;;;;5271:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5271:54:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12239:16;:14;:16::i;:::-;12208:47;;:27;12224:10;12208:15;:27::i;:::-;:47;;;;12257:26;;;;;;;;;;;;;;;;;;12200:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;12200:84:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12295:27;12311:10;12295:15;:27::i;:::-;5487:1;1099::18;11982:347:3;;;:::o;6476:709::-;651:1:26;623:24;:22;:24::i;:::-;:29;654:25;;;;;;;;;;;;;;;;;;615:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;615:65:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6562:13:3;:11;:13::i;:::-;6594:18;6605:6;6594:10;:18::i;:::-;6614:24;;;;;;;;;;;;;;;;;;6586:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;6586:53:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6657:6;6649:5;;:14;;;;;;;;;;;;;;;;;;6701:6;6682:15;:25;;;;6709:27;;;;;;;;;;;;;;;;;;6674:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;6674:63:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6773:15;6747:8;:23;;;:41;;;;;;;;;;;;;;;;;;6935:4;6912:8;:11;6921:1;6912:11;;;;;;;;;;;:20;;;:27;;;;;;;;;;;;;;;;;;6969:1;6949:17;:21;;;;7104:1;7080:21;:25;;;;7150:28;7161:16;:14;:16::i;:::-;7150:10;:28::i;:::-;;6476:709;;:::o;11476:338::-;806:32;;;;;;;;;;;;;;;;;;;11566:85;11570:6;11586:1;11590:8;:16;;:24;11607:6;11590:24;;;;;;;;;;;;;;;;11616:8;:18;;:26;11635:6;11616:26;;;;;;;;;;;;;;;;;;;;;;;;;:34;;11649:1;11616:34;;;11645:1;11616:34;11566:85;;:3;:85::i;:::-;1031:38:18;1042:10;1054:5;1061:7;1031:10;:38::i;:::-;1071:17;;;;;;;;;;;;;;;;;;1023:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1023:66:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5178:23:3;5204:57;5235:25;:23;:25::i;:::-;5204:57;;:30;:57::i;:::-;5178:83;;5279:18;5299:25;;;;;;;;;;;;;;;;;;5271:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5271:54:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11720:1;11693:8;:16;;:24;11710:6;11693:24;;;;;;;;;;;;;;;:28;;;;11760:5;11731:8;:18;;:26;11750:6;11731:26;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;11790:6;11780:27;;;11798:1;11801:5;11780:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;1099:1:18;11476:338:3;;;:::o;18868:186::-;18924:14;18940;18975:8;:16;;:24;18992:6;18975:24;;;;;;;;;;;;;;;;18966:33;;19021:8;:18;;:26;19040:6;19021:26;;;;;;;;;;;;;;;;;;;;;;;;;19009:38;;18868:186;;;:::o;733:179:34:-;799:18;855:22;:20;:22::i;:::-;:40;;;896:7;855:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;855:49:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;855:49:34;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;855:49:34;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;855:49:34;;;;;;;;;;;;;;;;829:76;;733:179;;;:::o;13364:305:3:-;979:33;;;;;;;;;;;;;;;;;;;13477:41;13481:10;13501:7;:15;;13515:1;13501:15;;;13511:1;13501:15;13493:24;;13477:3;:41::i;:::-;1031:38:18;1042:10;1054:5;1061:7;1031:10;:38::i;:::-;1071:17;;;;;;;;;;;;;;;;;;1023:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1023:66:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13542:10:3;5423:1;5410:10;:14;:48;;;;;5441:17;;5428:10;:30;5410:48;5460:16;;;;;;;;;;;;;;;;;;5402:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5402:75:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13601:7;13600:8;13568;:20;13577:10;13568:20;;;;;;;;;;;:29;;;:40;;;;;;;;;;;;;;;;;;13642:10;13623:39;13654:7;13623:39;;;;;;;;;;;;;;;;;;;;;;1099:1:18;13364:305:3;;;;:::o;15600:814::-;15732:13;15759:16;15789:14;15817:25;15856:15;15885:17;15916:13;15943:14;15971:17;16013:23;15690:10;5423:1;5410:10;:14;:48;;;;;5441:17;;5428:10;:30;5410:48;5460:16;;;;;;;;;;;;;;;;;;5402:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5402:75:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16039:8;:20;16048:10;16039:20;;;;;;;;;;;16013:46;;16078:7;:13;;;;;;;;;;;;16070:21;;16112:7;:16;;;;;;;;;;;;16101:27;;16147:7;:14;;;16138:23;;16192:7;:26;;;;;;;;;;;;16171:47;;16239:7;:16;;;;;;;;;;;;16228:27;;16278:7;:18;;;;;;;;;;;;16265:31;;16316:7;:15;;;;;;;;;;;;16306:25;;16352:7;:16;;;;;;;;;;;;16341:27;;16390:7;:17;;;;;;;;;;;;16378:29;;15600:814;;;;;;;;;;;;;:::o;2466:229:18:-;2515:7;2621:8;:6;:8::i;:::-;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2621:27:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2621:27:18;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2621:27:18;;;;;;;;;;;;;;;;2614:34;;2466:229;:::o;16420:800:3:-;16568:15;16597:14;16625:17;16656:26;16696:13;16723:14;16751:15;16780:11;16816:31;16522:14;5587:1;5570:14;:18;:60;;;;;5609:21;;5592:14;:38;5570:60;5632:20;;;;;;;;;;;;;;;;;;5562:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5562:91:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16850:12;:28;16863:14;16850:28;;;;;;;;;;;16816:62;;16897:11;:17;;;;;;;;;;;;16889:25;;16933:11;:18;;;;;;;;;;;;16924:27;;16974:11;:22;;;;;;;;;;;;16961:35;;17013:11;:16;;;;;;;;;;;;17006:23;;17050:11;:20;;;;;;;;;;;;17039:31;;17089:11;:18;;;17080:27;;17129:11;:21;;;17117:33;;17182:11;:31;;;;;;;;;;;;17160:53;;16420:800;;;;;;;;;;;:::o;678:76::-;723:31;;;;;;;;;;;;;;;;;;;678:76;:::o;760:78::-;806:32;;;;;;;;;;;;;;;;;;;760:78;:::o;12517:353::-;745:16:26;:14;:16::i;:::-;763:21;;;;;;;;;;;;;;;;;;737:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;737:48:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12606:10:3;5423:1;5410:10;:14;:48;;;;;5441:17;;5428:10;:30;5410:48;5460:16;;;;;;;;;;;;;;;;;;5402:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5402:75:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5178:23;5204:57;5235:25;:23;:25::i;:::-;5204:57;;:30;:57::i;:::-;5178:83;;5279:18;5299:25;;;;;;;;;;;;;;;;;;5271:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5271:54:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12685:16;:14;:16::i;:::-;12654:47;;:27;12670:10;12654:15;:27::i;:::-;:47;;;;12703:35;;;;;;;;;;;;;;;;;;12646:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;12646:93:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12790:10;12757:43;;:8;:20;12766:10;12757:20;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;12802:22;;;;;;;;;;;;;;;;;;12749:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;12749:76:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12836:27;12852:10;12836:15;:27::i;:::-;5487:1;795::26;12517:353:3;:::o;17226:589::-;17353:14;17381:16;17411:14;17439:26;17479:25;17529:21;17312:9;5747:13;;;;;;;;;;;5735:25;;:9;:25;;;5762:15;;;;;;;;;;;;;;;;;;5727:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5727:51:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17553:7;:18;17561:9;17553:18;;;;;;;;;;;;;;;17529:42;;17616:9;17594:31;;:18;:16;:18::i;:::-;:31;;;17582:43;;17648:6;:16;;;;;;;;;;;;17636:28;;17684:6;:14;;;;;;;;;;;;17674:24;;17729:6;:25;;;17708:46;;17784:6;:24;;;17764:44;;17226:589;;;;;;;;;:::o;10293:379::-;723:31;;;;;;;;;;;;;;;;;;;10395:63;10407:15;10399:24;;10433:8;:23;;;;;;;;;;;;10425:32;;10395:3;:63::i;:::-;1031:38:18;1042:10;1054:5;1061:7;1031:10;:38::i;:::-;1071:17;;;;;;;;;;;;;;;;;;1023:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1023:66:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5178:23:3;5204:57;5235:25;:23;:25::i;:::-;5204:57;;:30;:57::i;:::-;5178:83;;5279:18;5299:25;;;;;;;;;;;;;;;;;;5271:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5271:54:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10527:6;10508:15;:25;;;;10535:26;;;;;;;;;;;;;;;;;;10500:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10500:62:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10598:15;10572:8;:23;;;:41;;;;;;;;;;;;;;;;;;10628:37;10649:15;10628:37;;;;;;;;;;;;;;;;;;;;;;1099:1:18;10293:379:3;;;:::o;4321:27::-;;;;;;;;;;;;;:::o;8390:1698::-;8762:17;9641:23;639:33;;;;;;;;;;;;;;;;;;;8662:55;8666:6;8674:9;8685:7;8694:9;8662:55;;8705:11;8662:55;;:3;:55::i;:::-;1031:38:18;1042:10;1054:5;1061:7;1031:10;:38::i;:::-;1071:17;;;;;;;;;;;;;;;;;;1023:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1023:66:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5178:23:3;5204:57;5235:25;:23;:25::i;:::-;5204:57;;:30;:57::i;:::-;5178:83;;5279:18;5299:25;;;;;;;;;;;;;;;;;;5271:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5271:54:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8813:1;8803:7;:11;8816:29;;;;;;;;;;;;;;;;;;8795:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;8795:51:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8951:16;:14;:16::i;:::-;8928:39;;:19;:39;;;;:59;;;;;8986:1;8971:11;:16;;;8928:59;8924:392;;;9003:282;9044:6;9068:9;9095:7;1058:1;9199;9261:10;;9003:282;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;:282::i;:::-;9299:7;;8924:392;9463:7;9435:8;:16;;:24;9452:6;9435:24;;;;;;;;;;;;;;;;:35;;:66;;;;9475:8;:18;;:26;9494:6;9475:26;;;;;;;;;;;;;;;;;;;;;;;;;9474:27;9435:66;9503:12;;;;;;;;;;;;;;;;;;9427:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;9427:89:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9539:17;;:19;;;;;;;;;;;;9527:31;;9595:9;9573:57;;9584:9;9573:57;9606:11;9619:10;;9573:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9667:8;:19;9676:9;9667:19;;;;;;;;;;;9641:45;;9712:6;9696:7;:13;;;:22;;;;;;;;;;;;;;;;;;9747:9;9728:7;:16;;;:28;;;;;;;;;;;;;;;;;;9783:7;9766;:14;;:24;;;;9829:19;9800:7;:26;;;:48;;;;;;;;;;;;;;;;;;9877:9;9858:7;:16;;;:28;;;;;;;;;;;;;;;;;;9917:11;9896:7;:18;;;:32;;;;;;;;;;;;;;;;;;9958:10;9938:7;:17;;;:30;;;;;;;;;;;;;;;;;;10013:16;:14;:16::i;:::-;9983:46;;:26;9999:9;9983:15;:26::i;:::-;:46;;;;9979:103;;;10045:26;10061:9;10045:15;:26::i;:::-;9979:103;5335:1;1099::18;8390:1698:3;;;;;;;;;;;;;:::o;10890:438::-;806:32;;;;;;;;;;;;;;;;;;;11016:82;11020:6;11028:7;11037:8;:16;;:24;11054:6;11037:24;;;;;;;;;;;;;;;;11063:8;:18;;:26;11082:6;11063:26;;;;;;;;;;;;;;;;;;;;;;;;;:34;;11096:1;11063:34;;;11092:1;11063:34;11016:82;;:3;:82::i;:::-;1031:38:18;1042:10;1054:5;1061:7;1031:10;:38::i;:::-;1071:17;;;;;;;;;;;;;;;;;;1023:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1023:66:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5178:23:3;5204:57;5235:25;:23;:25::i;:::-;5204:57;;:30;:57::i;:::-;5178:83;;5279:18;5299:25;;;;;;;;;;;;;;;;;;5271:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5271:54:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11167:7;11140:8;:16;;:24;11157:6;11140:24;;;;;;;;;;;;;;;:34;;;;11189:8;:18;;:26;11208:6;11189:26;;;;;;;;;;;;;;;;;;;;;;;;;11188:27;11184:91;;;11260:4;11231:8;:18;;:26;11250:6;11231:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;11184:91;11299:6;11289:32;;;11307:7;11316:4;11289:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;1099:1:18;10890:438:3;;;;:::o;15488:106::-;15547:4;15571:16;:14;:16::i;:::-;15570:17;15563:24;;15488:106;;;:::o;796::17:-;834:7;860:35;601:66;860:15;;:33;;;;:35::i;:::-;853:42;;796:106;:::o;889:137:26:-;944:7;970:49;353:66;970:29;;:47;;;;:49::i;:::-;963:56;;889:137;:::o;14082:376:3:-;14171:14;745:16:26;:14;:16::i;:::-;763:21;;;;;;;;;;;;;;;;;;737:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;737:48:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5178:23:3;5204:57;5235:25;:23;:25::i;:::-;5204:57;;:30;:57::i;:::-;5178:83;;5279:18;5299:25;;;;;;;;;;;;;;;;;;5271:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5271:54:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;269:1:23;14188:13:3;;:6;:13;;;:69;;14234:6;14228:23;;;14252:4;14228:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14228:29:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14228:29:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14228:29:3;;;;;;;;;;;;;;;;14188:69;;;14212:4;14204:21;;;14188:69;14171:86;;14284:1;14275:6;:10;14287:25;;;;;;;;;;;;;;;;;;14267:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;14267:46:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14324:127;14346:6;14366;14324:127;;;;;;;;;;;;;;;;;;14418:4;14436:5;14324:8;:127::i;:::-;795:1:26;14082:376:3;;:::o;844:82::-;892:34;;;;;;;;;;;;;;;;;;;844:82;:::o;19419:112::-;19481:6;745:16:26;:14;:16::i;:::-;763:21;;;;;;;;;;;;;;;;;;737:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;737:48:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19506:18:3;:16;:18::i;:::-;19499:25;;19419:112;:::o;687:446:32:-;811:13;1019:14;755:27;775:6;755:19;:27::i;:::-;784:16;;;;;;;;;;;;;;;;;;747:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;747:54:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;827:18;:16;:18::i;:::-;811:34;;863:17;874:5;863:10;:17::i;:::-;882:24;;;;;;;;;;;;;;;;;;855:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;855:52:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;269:1:23;922:13:32;;:6;:13;;;918:209;;;951:5;:14;;:37;974:4;966:21;;;951:37;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;951:37:32;918:209;;;1042:6;1036:23;;;1060:4;1036:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1036:29:32;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1036:29:32;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1036:29:32;;;;;;;;;;;;;;;;1019:46;;1085:6;1079:22;;;1102:5;1109:6;1079:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1079:37:32;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1079:37:32;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1079:37:32;;;;;;;;;;;;;;;;;918:209;687:446;;;:::o;1524:826:18:-;1616:4;1702:20;2106:16;2132:18;1637:16;:14;:16::i;:::-;1636:17;1632:60;;;1676:5;1669:12;;;;1632:60;1725:8;:6;:8::i;:::-;1702:31;;1780:1;1747:35;;1755:12;1747:35;;;1743:78;;;1805:5;1798:12;;;;1743:78;2170:2;2153:7;:14;:19;2132:40;;2212:7;2205:14;;2244:10;2239:3;2232:23;2281:12;:26;;;2308:7;2325:4;2332:5;2339:3;2281:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2281:62:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2281:62:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2281:62:18;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2281:62:18;;;;;;;;;;;;;;;;2274:69;;1524:826;;;;;;;;;:::o;918:231:34:-;971:18;1001:20;1024:8;:6;:8::i;:::-;:15;;;1368:66:45;1040:25:34;;330:66:36;1067:25:34;;1024:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1024:69:34;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1024:69:34;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1024:69:34;;;;;;;;;;;;;;;;1001:92;;1129:12;1103:39;;918:231;;:::o;15012:178:3:-;15105:12;745:16:26;:14;:16::i;:::-;763:21;;;;;;;;;;;;;;;;;;737:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;737:48:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15136:47:3;15167:15;15136:47;;:30;:47::i;:::-;15129:54;;15012:178;;;:::o;18757:105::-;18807:6;18832:8;:23;;;;;;;;;;;;18825:30;;18757:105;:::o;7445:260::-;745:16:26;:14;:16::i;:::-;763:21;;;;;;;;;;;;;;;;;;737:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;737:48:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5178:23:3;5204:57;5235:25;:23;:25::i;:::-;5204:57;;:30;:57::i;:::-;5178:83;;5279:18;5299:25;;;;;;;;;;;;;;;;;;5271:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5271:54:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7573:125;7595:6;7615:7;7636:10;;7573:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7660:10;7684:4;7573:8;:125::i;:::-;795:1:26;7445:260:3;;;;:::o;18191:560::-;18283:6;18301:22;;:::i;:::-;18590:15;18655:18;18262:10;5423:1;5410:10;:14;:48;;;;;5441:17;;5428:10;:30;5410:48;5460:16;;;;;;;;;;;;;;;;;;5402:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5402:75:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18326:8;:20;18335:10;18326:20;;;;;;;;;;;18301:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18380:7;:18;;;18361:37;;:7;:15;;;:37;;;;18357:159;;;1270:2;18414:17;;;;18357:159;18608:37;18628:7;:16;;;18608:7;:15;;;:19;;;;:37;;;;:::i;:::-;18590:55;;18676:40;18707:8;18676:7;:26;;;:30;;;;:40;;;;:::i;:::-;18655:61;;18733:11;18726:18;;5487:1;18191:560;;;;;;;:::o;17821:364::-;17965:16;17983:14;18013:37;17937:9;5747:13;;;;;;;;;;;5735:25;;:9;:25;;;5762:15;;;;;;;;;;;;;;;;;;5727:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5727:51:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18053:7;:18;18061:9;18053:18;;;;;;;;;;;;;;;:33;;:41;18087:6;18053:41;;;;;;;;;;;;;;;18013:81;;18115:14;:23;;;18104:34;;18157:14;:21;;;18148:30;;17821:364;;;;;;;:::o;674:116:17:-;713:7;747:35;485:66;747:15;;:33;;;;:35::i;:::-;732:51;;674:116;:::o;4130:32:3:-;;;;:::o;287:117:28:-;331:4;277:2;354:24;:22;:24::i;:::-;:43;347:50;;287:117;:::o;932:80:3:-;979:33;;;;;;;;;;;;;;;;;;;932:80;:::o;4229:36::-;;;;:::o;19167:139::-;19246:7;745:16:26;:14;:16::i;:::-;763:21;;;;;;;;;;;;;;;;;;737:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;737:48:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19272:27:3;19292:6;19272:19;:27::i;:::-;19265:34;;19167:139;;;:::o;3800:18::-;;;;;;;;;;;;;:::o;347:94:29:-;396:7;422:12;415:19;;347:94;:::o;26606:188:3:-;26657:6;26786:1;26770:13;;;;;;;;;;;:17;26763:24;;26606:188;:::o;1261:106:29:-;1310:6;1335:25;:14;:12;:14::i;:::-;:23;:25::i;:::-;1328:32;;1261:106;:::o;1685:172:51:-;1745:7;1812:9;1778:2;1772;:8;;1782:19;;;;;;;;;;;;;;;;;;1764:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1764:38:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1829:2;1824;:7;1812:19;;1849:1;1842:8;;1685:172;;;;;:::o;1835:166:52:-;1893:6;1911:8;1927:2;1922;:7;1911:18;;1952:2;1947:7;;:1;:7;;;;1956:18;;;;;;;;;;;;;;;;;;1939:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1939:36:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1993:1;1986:8;;1835:166;;;;;:::o;20807:777:3:-;20864:6;20983:18;21030:21;21296:14;21004:13;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20983:36;;21054:7;:20;21062:11;21054:20;;;;;;;;;;;;;;;21030:44;;21103:10;21084:6;:16;;;:29;;;;;;;;;;;;;;;;;;21352:1;21326:8;:23;;;;;;;;;;;;21313:10;:36;:40;21296:57;;21377:10;21367:20;;:7;:20;;;21363:85;;;1270:2;21417:20;;21363:85;21474:7;21457:6;:14;;;:24;;;;;;;;;;;;;;;;;;21507:11;21497:56;;;21520:6;:16;;;;;;;;;;;;21538:6;:14;;;;;;;;;;;;21497:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21571:6;21564:13;;20807:777;;;;;;:::o;23006:439::-;23180:258;23212:4;23254:6;23274:7;23295;1058:1;23377;23418:10;23180:18;:258::i;:::-;23006:439;;;;:::o;1679:148:10:-;1739:11;1780:1;1766:16;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;1766:16:10;;;;1762:20;;1799:2;1792:1;1794;1792:4;;;;;;;;;;;;;;;;;:9;;;;;1818:2;1811:1;1813;1811:4;;;;;;;;;;;;;;;;;:9;;;;;1679:148;;;;:::o;21590:832:3:-;21654:23;21771:12;21680:8;:20;21689:10;21680:20;;;;;;;;;;;21654:46;;21719:7;:16;;;;;;;;;;;;21718:17;21737:22;;;;;;;;;;;;;;;;;;21710:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;21710:50:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21786:1;21771:16;;21797:619;21835:16;:14;:16::i;:::-;21804:47;;:27;21820:10;21804:15;:27::i;:::-;:47;;;;:78;;;;;1163:2;21855:5;:27;;;21804:78;21797:619;;;21903:46;21919:7;:13;;;;;;;;;;;;21934:7;:14;;;21903:15;:46::i;:::-;21902:47;21898:141;;;21974:26;21989:10;21974:26;;;;;;;;;;;;;;;;;;22018:7;;21898:141;22150:1;22131:7;:15;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22174:1;22165:10;;;;22190:215;22231:7;:13;;;;;;;;;;;;22262:7;:16;;;;;;;;;;;;22296:7;:14;;;22328:10;22356:7;:15;;;;;;;;;;;;22190:215;;;;;;;;;;;;;:23;:215::i;:::-;21797:619;;;21590:832;;;;:::o;1455:123:26:-;651:1;623:24;:22;:24::i;:::-;:29;654:25;;;;;;;;;;;;;;;;;;615:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;615:65:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1506;1554:16;:14;:16::i;:::-;353:66;1506:29;;:47;;;;;:65;;;;:::i;:::-;1455:123::o;426:244:27:-;486:4;576:12;525:1;506:21;;:7;:21;;;502:64;;;550:5;543:12;;;;502:64;629:7;617:20;609:28;;662:1;655:4;:8;648:15;;426:244;;;;;:::o;775:149:10:-;859:11;889:28;901:2;893:11;;906:2;910;914;889:3;:28::i;:::-;882:35;;775:149;;;;;;:::o;1062:174::-;1158:11;1188:41;1200:2;1192:11;;1213:2;1205:11;;1218:2;1222;1226;1188:3;:41::i;:::-;1181:48;;1062:174;;;;;;;:::o;22428:572:3:-;22705:7;22674:27;22694:6;22674:19;:27::i;:::-;:38;;22714:22;;;;;;;;;;;;;;;;;;22666:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;22666:71:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22747:193;22779:5;22798:6;22818:9;22841:7;22862:10;22886:20;22920:10;22747:18;:193::i;:::-;22951:5;;;;;;;;;;;:14;;;22966:6;22974:9;22985:7;22951:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22951:42:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22951:42:3;;;;22428:572;;;;;;:::o;379:134:31:-;447:12;496:8;490:15;482:23;;480:27;;;:::o;519:134::-;587:12;636:8;630:15;622:23;;620:27;;;:::o;809:239:52:-;867:6;885:9;919:2;911:11;;905:2;897:11;;:25;885:37;;944:20;940:1;:24;966:18;;;;;;;;;;;;;;;;;;932:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;932:53:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1039:1;1025:16;;809:239;;;;;:::o;239:134:31:-;307:12;356:8;350:15;342:23;;340:27;;;:::o;26056:544:3:-;26124:7;26226:13;26148:8;:18;;:26;26167:6;26148:26;;;;;;;;;;;;;;;;;;;;;;;;;26147:27;26143:73;;;1216:2;26190:15;;;;26143:73;26242:7;:27;26250:18;:16;:18::i;:::-;26242:27;;;;;;;;;;;;;;;:42;;:50;26285:6;26242:50;;;;;;;;;;;;;;;:59;;;26226:75;;26482:8;:16;;:24;26499:6;26482:24;;;;;;;;;;;;;;;;26473:5;:33;;26469:72;;;26529:1;26522:8;;;;26469:72;26558:35;26587:5;26558:8;:16;;:24;26575:6;26558:24;;;;;;;;;;;;;;;;:28;;:35;;;;:::i;:::-;26551:42;;26056:544;;;;;:::o;926:144:29:-;973:7;999:15;992:22;;926:144;:::o;188:149:30:-;240:6;101:2;271:10;;266:1;:15;;283:20;;;;;;;;;;;;;;;;;;258:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;258:46:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;328:1;314:16;;188:149;;;:::o;23451:1329:3:-;23706:15;23752:37;24043:21;24100:31;24522:21;23724:18;:16;:18::i;:::-;23706:36;;23792:7;:17;23800:8;23792:17;;;;;;;;;;;;;;;:32;;:40;23825:6;23792:40;;;;;;;;;;;;;;;23752:80;;23846:9;23842:191;;;23895:34;23921:7;23895:14;:21;;;:25;;:34;;;;:::i;:::-;23871:14;:21;;:58;;;;23842:191;;;23986:36;24014:7;23986:14;:23;;;:27;;:36;;;;:::i;:::-;23960:14;:23;;:62;;;;23842:191;24067:21;;:23;;;;;;;;;;;;24043:47;;24134:12;:27;24147:13;24134:27;;;;;;;;;;;24100:61;;24191:6;24171:11;:17;;;:26;;;;;;;;;;;;;;;;;;24228:7;24207:11;:18;;;:28;;;;;;;;;;;;;;;;;;24270:9;24245:11;:22;;;:34;;;;;;;;;;;;;;;;;;24310:7;24289:11;:18;;:28;;;;24351:10;24327:11;:21;;:34;;;;24405:20;24371:11;:31;;;:54;;;;;;;;;;;;;;;;;;24454:16;:14;:16::i;:::-;24435:11;:16;;;:35;;;;;;;;;;;;;;;;;;24503:8;24480:11;:20;;;:31;;;;;;;;;;;;;;;;;;24546:7;:17;24554:8;24546:17;;;;;;;;;;;;;;;24522:41;;1108:1;24577:6;:25;;;:43;24573:115;;;24664:13;24636:6;:25;;:41;;;;24573:115;24744:7;24703:70;;24718:13;24703:70;24733:9;24753:7;24762:10;24703:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;24703:70:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23451:1329;;;;;;;;;;;;:::o;25865:185::-;25946:4;26000:7;25969:27;25989:6;25969:19;:27::i;:::-;:38;;:74;;;;;26036:7;26011:5;;;;;;;;;;;:13;;;26025:6;26011:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26011:21:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26011:21:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;26011:21:3;;;;;;;;;;;;;;;;:32;;25969:74;25962:81;;25865:185;;;;:::o;1028:119:31:-;1134:4;1124:8;1117:22;1115:26;;:::o;2018:210:10:-;2102:11;2143:1;2129:16;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;2129:16:10;;;;2125:20;;2162:2;2155:1;2157;2155:4;;;;;;;;;;;;;;;;;:9;;;;;2181:2;2174:1;2176;2174:4;;;;;;;;;;;;;;;;;:9;;;;;2200:2;2193:1;2195;2193:4;;;;;;;;;;;;;;;;;:9;;;;;2219:2;2212:1;2214;2212:4;;;;;;;;;;;;;;;;;:9;;;;;2018:210;;;;;;:::o;2234:241::-;2330:11;2371:1;2357:16;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;2357:16:10;;;;2353:20;;2390:2;2383:1;2385;2383:4;;;;;;;;;;;;;;;;;:9;;;;;2409:2;2402:1;2404;2402:4;;;;;;;;;;;;;;;;;:9;;;;;2428:2;2421:1;2423;2421:4;;;;;;;;;;;;;;;;;:9;;;;;2447:2;2440:1;2442;2440:4;;;;;;;;;;;;;;;;;:9;;;;;2466:2;2459:1;2461;2459:4;;;;;;;;;;;;;;;;;:9;;;;;2234:241;;;;;;;:::o;1928:170:51:-;1988:7;2007:9;2024:2;2019;:7;2007:19;;2049:2;2044:1;:7;;2053:18;;;;;;;;;;;;;;;;;;2036:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2036:36:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2090:1;2083:8;;1928:170;;;;;:::o;458:26473:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o",
  "source": "/*\n * SPDX-License-Identitifer:    GPL-3.0-or-later\n */\n\npragma solidity 0.4.24;\n\nimport \"@aragon/os/contracts/apps/AragonApp.sol\";\nimport \"@aragon/os/contracts/common/EtherTokenConstant.sol\";\nimport \"@aragon/os/contracts/common/IsContract.sol\";\n\nimport \"@aragon/os/contracts/lib/token/ERC20.sol\";\nimport \"@aragon/os/contracts/lib/math/SafeMath.sol\";\nimport \"@aragon/os/contracts/lib/math/SafeMath64.sol\";\n\nimport \"@aragon/apps-vault/contracts/Vault.sol\";\n\n\ncontract Finance is EtherTokenConstant, IsContract, AragonApp {\n    using SafeMath for uint256;\n    using SafeMath64 for uint64;\n\n    bytes32 public constant CREATE_PAYMENTS_ROLE = keccak256(\"CREATE_PAYMENTS_ROLE\");\n    bytes32 public constant CHANGE_PERIOD_ROLE = keccak256(\"CHANGE_PERIOD_ROLE\");\n    bytes32 public constant CHANGE_BUDGETS_ROLE = keccak256(\"CHANGE_BUDGETS_ROLE\");\n    bytes32 public constant EXECUTE_PAYMENTS_ROLE = keccak256(\"EXECUTE_PAYMENTS_ROLE\");\n    bytes32 public constant MANAGE_PAYMENTS_ROLE = keccak256(\"MANAGE_PAYMENTS_ROLE\");\n\n    uint256 internal constant NO_PAYMENT = 0;\n    uint256 internal constant NO_TRANSACTION = 0;\n    uint256 internal constant MAX_PAYMENTS_PER_TX = 20;\n    uint256 internal constant MAX_UINT = uint256(-1);\n    uint64 internal constant MAX_UINT64 = uint64(-1);\n\n    string private constant ERROR_COMPLETE_TRANSITION = \"FINANCE_COMPLETE_TRANSITION\";\n    string private constant ERROR_NO_PAYMENT = \"FINANCE_NO_PAYMENT\";\n    string private constant ERROR_NO_TRANSACTION = \"FINANCE_NO_TRANSACTION\";\n    string private constant ERROR_NO_PERIOD = \"FINANCE_NO_PERIOD\";\n    string private constant ERROR_VAULT_NOT_CONTRACT = \"FINANCE_VAULT_NOT_CONTRACT\";\n    string private constant ERROR_INIT_PERIOD_TOO_SHORT = \"FINANCE_INIT_PERIOD_TOO_SHORT\";\n    string private constant ERROR_SET_PERIOD_TOO_SHORT = \"FINANCE_SET_PERIOD_TOO_SHORT\";\n    string private constant ERROR_NEW_PAYMENT_AMOUNT_ZERO = \"FINANCE_NEW_PAYMENT_AMOUNT_ZERO\";\n    string private constant ERROR_RECOVER_AMOUNT_ZERO = \"FINANCE_RECOVER_AMOUNT_ZERO\";\n    string private constant ERROR_DEPOSIT_AMOUNT_ZERO = \"FINANCE_DEPOSIT_AMOUNT_ZERO\";\n    string private constant ERROR_BUDGET = \"FINANCE_BUDGET\";\n    string private constant ERROR_EXECUTE_PAYMENT_TIME = \"FINANCE_EXECUTE_PAYMENT_TIME\";\n    string private constant ERROR_RECEIVER_EXECUTE_PAYMENT_TIME = \"FINANCE_RCVR_EXEC_PAYMENT_TIME\";\n    string private constant ERROR_PAYMENT_RECEIVER = \"FINANCE_PAYMENT_RECEIVER\";\n    string private constant ERROR_TOKEN_TRANSFER_FROM_REVERTED = \"FINANCE_TKN_TRANSFER_FROM_REVERT\";\n    string private constant ERROR_VALUE_MISMATCH = \"FINANCE_VALUE_MISMATCH\";\n    string private constant ERROR_PAYMENT_INACTIVE = \"FINANCE_PAYMENT_INACTIVE\";\n    string private constant ERROR_REMAINING_BUDGET = \"FINANCE_REMAINING_BUDGET\";\n\n    // Order optimized for storage\n    struct Payment {\n        address token;\n        address receiver;\n        address createdBy;\n        bool inactive;\n        uint256 amount;\n        uint64 initialPaymentTime;\n        uint64 interval;\n        uint64 maxRepeats;\n        uint64 repeats;\n    }\n\n    // Order optimized for storage\n    struct Transaction {\n        address token;\n        address entity;\n        bool isIncoming;\n        uint256 amount;\n        uint256 paymentId;\n        uint64 paymentRepeatNumber;\n        uint64 date;\n        uint64 periodId;\n    }\n\n    struct TokenStatement {\n        uint256 expenses;\n        uint256 income;\n    }\n\n    struct Period {\n        uint64 startTime;\n        uint64 endTime;\n        uint256 firstTransactionId;\n        uint256 lastTransactionId;\n\n        mapping (address => TokenStatement) tokenStatement;\n    }\n\n    struct Settings {\n        uint64 periodDuration;\n        mapping (address => uint256) budgets;\n        mapping (address => bool) hasBudget;\n    }\n\n    Vault public vault;\n    Settings internal settings;\n\n    // We are mimicing arrays, we use mappings instead to make app upgrade more graceful\n    mapping (uint256 => Payment) internal payments;\n    // Payments start at index 1, to allow us to use payments[0] for transactions that are not\n    // linked to a recurring payment\n    uint256 public paymentsNextIndex;\n\n    mapping (uint256 => Transaction) internal transactions;\n    uint256 public transactionsNextIndex;\n\n    mapping (uint64 => Period) internal periods;\n    uint64 public periodsLength;\n\n    event NewPeriod(uint64 indexed periodId, uint64 periodStarts, uint64 periodEnds);\n    event SetBudget(address indexed token, uint256 amount, bool hasBudget);\n    event NewPayment(uint256 indexed paymentId, address indexed recipient, uint64 maxRepeats, string reference);\n    event NewTransaction(uint256 indexed transactionId, bool incoming, address indexed entity, uint256 amount, string reference);\n    event ChangePaymentState(uint256 indexed paymentId, bool inactive);\n    event ChangePeriodDuration(uint64 newDuration);\n    event PaymentFailure(uint256 paymentId);\n\n    // Modifier used by all methods that impact accounting to make sure accounting period\n    // is changed before the operation if needed\n    // NOTE: its use **MUST** be accompanied by an initialization check\n    modifier transitionsPeriod {\n        bool completeTransition = _tryTransitionAccountingPeriod(getMaxPeriodTransitions());\n        require(completeTransition, ERROR_COMPLETE_TRANSITION);\n        _;\n    }\n\n    modifier paymentExists(uint256 _paymentId) {\n        require(_paymentId > 0 && _paymentId < paymentsNextIndex, ERROR_NO_PAYMENT);\n        _;\n    }\n\n    modifier transactionExists(uint256 _transactionId) {\n        require(_transactionId > 0 && _transactionId < transactionsNextIndex, ERROR_NO_TRANSACTION);\n        _;\n    }\n\n    modifier periodExists(uint64 _periodId) {\n        require(_periodId < periodsLength, ERROR_NO_PERIOD);\n        _;\n    }\n\n    /**\n     * @dev Sends ETH to Vault. Sends all the available balance.\n     * @notice Deposit ETH to the Vault, to avoid locking them in this Finance app forever\n     */\n    function () external payable isInitialized transitionsPeriod {\n        _deposit(\n            ETH,\n            msg.value,\n            \"Ether transfer to Finance app\",\n            msg.sender,\n            true\n        );\n    }\n\n    /**\n    * @notice Initialize Finance app for Vault at `_vault` with period length of `@transformTime(_periodDuration)`\n    * @param _vault Address of the vault Finance will rely on (non changeable)\n    * @param _periodDuration Duration in seconds of each period\n    */\n    function initialize(Vault _vault, uint64 _periodDuration) external onlyInit {\n        initialized();\n\n        require(isContract(_vault), ERROR_VAULT_NOT_CONTRACT);\n        vault = _vault;\n\n        require(_periodDuration >= 1 days, ERROR_INIT_PERIOD_TOO_SHORT);\n        settings.periodDuration = _periodDuration;\n\n        // Reserve the first recurring payment index as an unused index for transactions not linked to a payment\n        payments[0].inactive = true;\n        paymentsNextIndex = 1;\n\n        // Reserve the first transaction index as an unused index for periods with no transactions\n        transactionsNextIndex = 1;\n\n        // Start the first period\n        _newPeriod(getTimestamp64());\n    }\n\n    /**\n    * @dev Deposit for approved ERC20 tokens or ETH\n    * @notice Deposit `@tokenAmount(_token, _amount)`\n    * @param _token Address of deposited token\n    * @param _amount Amount of tokens sent\n    * @param _reference Reason for payment\n    */\n    function deposit(address _token, uint256 _amount, string _reference) external payable isInitialized transitionsPeriod {\n        _deposit(\n            _token,\n            _amount,\n            _reference,\n            msg.sender,\n            true\n        );\n    }\n\n    /**\n    * @notice Create a new payment of `@tokenAmount(_token, _amount)` to `_receiver``_maxRepeats > 0 ? ', executing ' + _maxRepeats + ' times at intervals of ' + @transformTime(_interval) : ''`\n    * @param _token Address of token for payment\n    * @param _receiver Address that will receive payment\n    * @param _amount Tokens that are payed every time the payment is due\n    * @param _initialPaymentTime Timestamp for when the first payment is done\n    * @param _interval Number of seconds that need to pass between payment transactions\n    * @param _maxRepeats Maximum instances a payment can be executed\n    * @param _reference String detailing payment reason\n    */\n    function newPayment(\n        address _token,\n        address _receiver,\n        uint256 _amount,\n        uint64 _initialPaymentTime,\n        uint64 _interval,\n        uint64 _maxRepeats,\n        string _reference\n    )\n        external\n        authP(CREATE_PAYMENTS_ROLE, arr(_token, _receiver, _amount, _interval, _maxRepeats))\n        transitionsPeriod\n        returns (uint256 paymentId)\n    {\n        require(_amount > 0, ERROR_NEW_PAYMENT_AMOUNT_ZERO);\n\n        // Avoid saving payment data for 1 time immediate payments\n        if (_initialPaymentTime <= getTimestamp64() && _maxRepeats == 1) {\n            _makePaymentTransaction(\n                _token,\n                _receiver,\n                _amount,\n                NO_PAYMENT,   // unrelated to any payment id; it isn't created\n                0,   // also unrelated to any payment repeats\n                _reference\n            );\n            return;\n        }\n\n        // Budget must allow at least one instance of this payment each period, or not be set at all\n        require(settings.budgets[_token] >= _amount || !settings.hasBudget[_token], ERROR_BUDGET);\n\n        paymentId = paymentsNextIndex++;\n        emit NewPayment(paymentId, _receiver, _maxRepeats, _reference);\n\n        Payment storage payment = payments[paymentId];\n        payment.token = _token;\n        payment.receiver = _receiver;\n        payment.amount = _amount;\n        payment.initialPaymentTime = _initialPaymentTime;\n        payment.interval = _interval;\n        payment.maxRepeats = _maxRepeats;\n        payment.createdBy = msg.sender;\n\n        if (nextPaymentTime(paymentId) <= getTimestamp64()) {\n            _executePayment(paymentId);\n        }\n    }\n\n    /**\n    * @notice Change period duration to `@transformTime(_periodDuration)`, effective for next accounting period\n    * @param _periodDuration Duration in seconds for accounting periods\n    */\n    function setPeriodDuration(uint64 _periodDuration)\n        external\n        authP(CHANGE_PERIOD_ROLE, arr(uint256(_periodDuration), uint256(settings.periodDuration)))\n        transitionsPeriod\n    {\n        require(_periodDuration >= 1 days, ERROR_SET_PERIOD_TOO_SHORT);\n        settings.periodDuration = _periodDuration;\n        emit ChangePeriodDuration(_periodDuration);\n    }\n\n    /**\n    * @notice Set budget for `_token.symbol(): string` to `@tokenAmount(_token, _amount, false)`, effective immediately\n    * @param _token Address for token\n    * @param _amount New budget amount\n    */\n    function setBudget(\n        address _token,\n        uint256 _amount\n    )\n        external\n        authP(CHANGE_BUDGETS_ROLE, arr(_token, _amount, settings.budgets[_token], settings.hasBudget[_token] ? 1 : 0))\n        transitionsPeriod\n    {\n        settings.budgets[_token] = _amount;\n        if (!settings.hasBudget[_token]) {\n            settings.hasBudget[_token] = true;\n        }\n        emit SetBudget(_token, _amount, true);\n    }\n\n    /**\n    * @notice Remove spending limit for `_token.symbol(): string`, effective immediately\n    * @param _token Address for token\n    */\n    function removeBudget(address _token)\n        external\n        authP(CHANGE_BUDGETS_ROLE, arr(_token, uint256(0), settings.budgets[_token], settings.hasBudget[_token] ? 1 : 0))\n        transitionsPeriod\n    {\n        settings.budgets[_token] = 0;\n        settings.hasBudget[_token] = false;\n        emit SetBudget(_token, 0, false);\n    }\n\n    /**\n    * @dev Executes any payment (requires role)\n    * @notice Execute pending payment #`_paymentId`\n    * @param _paymentId Identifier for payment\n    */\n    function executePayment(uint256 _paymentId)\n        external\n        authP(EXECUTE_PAYMENTS_ROLE, arr(_paymentId, payments[_paymentId].amount))\n        paymentExists(_paymentId)\n        transitionsPeriod\n    {\n        require(nextPaymentTime(_paymentId) <= getTimestamp64(), ERROR_EXECUTE_PAYMENT_TIME);\n\n        _executePayment(_paymentId);\n    }\n\n    /**\n    * @dev Always allows receiver of a payment to trigger execution\n    * @notice Execute pending payment #`_paymentId`\n    * @param _paymentId Identifier for payment\n    */\n    function receiverExecutePayment(uint256 _paymentId) external isInitialized paymentExists(_paymentId) transitionsPeriod {\n        require(nextPaymentTime(_paymentId) <= getTimestamp64(), ERROR_RECEIVER_EXECUTE_PAYMENT_TIME);\n        require(payments[_paymentId].receiver == msg.sender, ERROR_PAYMENT_RECEIVER);\n\n        _executePayment(_paymentId);\n    }\n\n    /**\n    * @notice `_active ? 'Activate' : 'Disable'` payment #`_paymentId`\n    * @dev Note that we do not require this action to transition periods, as it doesn't directly\n    *      impact any accounting periods.\n    *      Not having to transition periods also makes disabling payments easier to prevent funds\n    *      from being pulled out in the event of a breach.\n    * @param _paymentId Identifier for payment\n    * @param _active Whether it will be active or inactive\n    */\n    function setPaymentStatus(uint256 _paymentId, bool _active)\n        external\n        authP(MANAGE_PAYMENTS_ROLE, arr(_paymentId, uint256(_active ? 1 : 0)))\n        paymentExists(_paymentId)\n    {\n        payments[_paymentId].inactive = !_active;\n        emit ChangePaymentState(_paymentId, _active);\n    }\n\n    /**\n     * @dev Allows making a simple payment from this contract to the Vault, to avoid locked tokens.\n     *      This contract should never receive tokens with a simple transfer call, but in case it\n     *      happens, this function allows for their recovery.\n     * @notice Send tokens held in this contract to the Vault\n     * @param _token Token whose balance is going to be transferred.\n     */\n    function recoverToVault(address _token) public isInitialized transitionsPeriod {\n        uint256 amount = _token == ETH ? address(this).balance : ERC20(_token).balanceOf(this);\n        require(amount > 0, ERROR_RECOVER_AMOUNT_ZERO);\n\n        _deposit(\n            _token,\n            amount,\n            \"Recover to Vault\",\n            this,\n            false\n        );\n    }\n\n    /**\n    * @dev Transitions accounting periods if needed. For preventing OOG attacks, a maxTransitions\n    *      param is provided. If more than the specified number of periods need to be transitioned,\n    *      it will return false.\n    * @notice Transition accounting period if needed\n    * @param _maxTransitions Maximum periods that can be transitioned\n    * @return success Boolean indicating whether the accounting period is the correct one (if false,\n    *                 maxTransitions was surpased and another call is needed)\n    */\n    function tryTransitionAccountingPeriod(uint64 _maxTransitions) public isInitialized returns (bool success) {\n        return _tryTransitionAccountingPeriod(_maxTransitions);\n    }\n\n    // consts\n\n    /**\n    * @dev Disable recovery escape hatch if the app has been initialized, as it could be used\n    *      maliciously to transfer funds in the Finance app to another Vault\n    *      finance#recoverToVault() should be used to recover funds to the Finance's vault\n    */\n    function allowRecoverability(address) public view returns (bool) {\n        return !hasInitialized();\n    }\n\n    function getPayment(uint256 _paymentId)\n        public\n        view\n        paymentExists(_paymentId)\n        returns (\n            address token,\n            address receiver,\n            uint256 amount,\n            uint64 initialPaymentTime,\n            uint64 interval,\n            uint64 maxRepeats,\n            bool inactive,\n            uint64 repeats,\n            address createdBy\n        )\n    {\n        Payment storage payment = payments[_paymentId];\n\n        token = payment.token;\n        receiver = payment.receiver;\n        amount = payment.amount;\n        initialPaymentTime = payment.initialPaymentTime;\n        interval = payment.interval;\n        maxRepeats = payment.maxRepeats;\n        repeats = payment.repeats;\n        inactive = payment.inactive;\n        createdBy = payment.createdBy;\n    }\n\n    function getTransaction(uint256 _transactionId)\n        public\n        view\n        transactionExists(_transactionId)\n        returns (\n            uint64 periodId,\n            uint256 amount,\n            uint256 paymentId,\n            uint64 paymentRepeatNumber,\n            address token,\n            address entity,\n            bool isIncoming,\n            uint64 date\n        )\n    {\n        Transaction storage transaction = transactions[_transactionId];\n\n        token = transaction.token;\n        entity = transaction.entity;\n        isIncoming = transaction.isIncoming;\n        date = transaction.date;\n        periodId = transaction.periodId;\n        amount = transaction.amount;\n        paymentId = transaction.paymentId;\n        paymentRepeatNumber = transaction.paymentRepeatNumber;\n    }\n\n    function getPeriod(uint64 _periodId)\n        public\n        view\n        periodExists(_periodId)\n        returns (\n            bool isCurrent,\n            uint64 startTime,\n            uint64 endTime,\n            uint256 firstTransactionId,\n            uint256 lastTransactionId\n        )\n    {\n        Period storage period = periods[_periodId];\n\n        isCurrent = _currentPeriodId() == _periodId;\n\n        startTime = period.startTime;\n        endTime = period.endTime;\n        firstTransactionId = period.firstTransactionId;\n        lastTransactionId = period.lastTransactionId;\n    }\n\n    function getPeriodTokenStatement(uint64 _periodId, address _token)\n        public\n        view\n        periodExists(_periodId)\n        returns (uint256 expenses, uint256 income)\n    {\n        TokenStatement storage tokenStatement = periods[_periodId].tokenStatement[_token];\n        expenses = tokenStatement.expenses;\n        income = tokenStatement.income;\n    }\n\n    function nextPaymentTime(uint256 _paymentId) public view paymentExists(_paymentId) returns (uint64) {\n        Payment memory payment = payments[_paymentId];\n\n        if (payment.repeats >= payment.maxRepeats) {\n            return MAX_UINT64; // re-executes in some billions of years time... should not need to worry\n        }\n\n        // Split in multiple lines to circunvent linter warning\n        uint64 increase = payment.repeats.mul(payment.interval);\n        uint64 nextPayment = payment.initialPaymentTime.add(increase);\n        return nextPayment;\n    }\n\n    function getPeriodDuration() public view returns (uint64) {\n        return settings.periodDuration;\n    }\n\n    function getBudget(address _token) public view returns (uint256 budget, bool hasBudget) {\n        budget = settings.budgets[_token];\n        hasBudget = settings.hasBudget[_token];\n    }\n\n    /**\n    * @dev We have to check for initialization as periods are only valid after initializing\n    */\n    function getRemainingBudget(address _token) public view isInitialized returns (uint256) {\n        return _getRemainingBudget(_token);\n    }\n\n    /**\n    * @dev We have to check for initialization as periods are only valid after initializing\n    */\n    function currentPeriodId() public view isInitialized returns (uint64) {\n        return _currentPeriodId();\n    }\n\n    // internal fns\n\n    function _deposit(address _token, uint256 _amount, string _reference, address _sender, bool _isExternalDeposit) internal {\n        require(_amount > 0, ERROR_DEPOSIT_AMOUNT_ZERO);\n        _recordIncomingTransaction(\n            _token,\n            _sender,\n            _amount,\n            _reference\n        );\n\n        // If it is an external deposit, check that the assets are actually transferred\n        // External deposit will be false when the assets were already in the Finance app\n        // and just need to be transferred to the vault\n        if (_isExternalDeposit) {\n            if (_token != ETH) {\n                // Get the tokens to Finance\n                require(ERC20(_token).transferFrom(msg.sender, this, _amount), ERROR_TOKEN_TRANSFER_FROM_REVERTED);\n            } else {\n                // Ensure that the ETH sent with the transaction equals the amount in the deposit\n                require(msg.value == _amount, ERROR_VALUE_MISMATCH);\n            }\n        }\n\n        if (_token == ETH) {\n            vault.deposit.value(_amount)(ETH, _amount);\n        } else {\n            ERC20(_token).approve(vault, _amount);\n            // finally we can deposit them\n            vault.deposit(_token, _amount);\n        }\n    }\n\n    function _newPeriod(uint64 _startTime) internal returns (Period storage) {\n        // There should be no way for this to overflow since each period is at least one day\n        uint64 newPeriodId = periodsLength++;\n\n        Period storage period = periods[newPeriodId];\n        period.startTime = _startTime;\n\n        // Be careful here to not overflow; if startTime + periodDuration overflows, we set endTime\n        // to MAX_UINT64 (let's assume that's the end of time for now).\n        uint64 endTime = _startTime + settings.periodDuration - 1;\n        if (endTime < _startTime) { // overflowed\n            endTime = MAX_UINT64;\n        }\n        period.endTime = endTime;\n\n        emit NewPeriod(newPeriodId, period.startTime, period.endTime);\n\n        return period;\n    }\n\n    function _executePayment(uint256 _paymentId) internal {\n        Payment storage payment = payments[_paymentId];\n        require(!payment.inactive, ERROR_PAYMENT_INACTIVE);\n\n        uint64 payed = 0;\n        while (nextPaymentTime(_paymentId) <= getTimestamp64() && payed < MAX_PAYMENTS_PER_TX) {\n            if (!_canMakePayment(payment.token, payment.amount)) {\n                emit PaymentFailure(_paymentId);\n                return;\n            }\n\n            // The while() predicate prevents these two from ever overflowing\n            payment.repeats += 1;\n            payed += 1;\n\n            _makePaymentTransaction(\n                payment.token,\n                payment.receiver,\n                payment.amount,\n                _paymentId,\n                payment.repeats,\n                \"\"\n            );\n        }\n    }\n\n    function _makePaymentTransaction(\n        address _token,\n        address _receiver,\n        uint256 _amount,\n        uint256 _paymentId,\n        uint64 _paymentRepeatNumber,\n        string _reference\n    )\n        internal\n    {\n        require(_getRemainingBudget(_token) >= _amount, ERROR_REMAINING_BUDGET);\n        _recordTransaction(\n            false,\n            _token,\n            _receiver,\n            _amount,\n            _paymentId,\n            _paymentRepeatNumber,\n            _reference\n        );\n\n        vault.transfer(_token, _receiver, _amount);\n    }\n\n    function _recordIncomingTransaction(\n        address _token,\n        address _sender,\n        uint256 _amount,\n        string _reference\n    )\n        internal\n    {\n        _recordTransaction(\n            true, // incoming transaction\n            _token,\n            _sender,\n            _amount,\n            NO_PAYMENT, // unrelated to any existing payment\n            0, // and no payment repeats\n            _reference\n        );\n    }\n\n    function _recordTransaction(\n        bool _incoming,\n        address _token,\n        address _entity,\n        uint256 _amount,\n        uint256 _paymentId,\n        uint64 _paymentRepeatNumber,\n        string _reference\n    )\n        internal\n    {\n        uint64 periodId = _currentPeriodId();\n        TokenStatement storage tokenStatement = periods[periodId].tokenStatement[_token];\n        if (_incoming) {\n            tokenStatement.income = tokenStatement.income.add(_amount);\n        } else {\n            tokenStatement.expenses = tokenStatement.expenses.add(_amount);\n        }\n\n        uint256 transactionId = transactionsNextIndex++;\n        Transaction storage transaction = transactions[transactionId];\n        transaction.token = _token;\n        transaction.entity = _entity;\n        transaction.isIncoming = _incoming;\n        transaction.amount = _amount;\n        transaction.paymentId = _paymentId;\n        transaction.paymentRepeatNumber = _paymentRepeatNumber;\n        transaction.date = getTimestamp64();\n        transaction.periodId = periodId;\n\n        Period storage period = periods[periodId];\n        if (period.firstTransactionId == NO_TRANSACTION) {\n            period.firstTransactionId = transactionId;\n        }\n\n        emit NewTransaction(transactionId, _incoming, _entity, _amount, _reference);\n    }\n\n    function _tryTransitionAccountingPeriod(uint256 _maxTransitions) internal returns (bool success) {\n        Period storage currentPeriod = periods[_currentPeriodId()];\n        uint64 timestamp = getTimestamp64();\n\n        // Transition periods if necessary\n        while (timestamp > currentPeriod.endTime) {\n            if (_maxTransitions == 0) {\n                // Required number of transitions is over allowed number, return false indicating\n                // it didn't fully transition\n                return false;\n            }\n            _maxTransitions = _maxTransitions.sub(1);\n\n            // If there were any transactions in period, record which was the last\n            // In case 0 transactions occured, first and last tx id will be 0\n            if (currentPeriod.firstTransactionId != NO_TRANSACTION) {\n                currentPeriod.lastTransactionId = transactionsNextIndex.sub(1);\n            }\n\n            // New period starts at end time + 1\n            currentPeriod = _newPeriod(currentPeriod.endTime.add(1));\n        }\n\n        return true;\n    }\n\n    function _canMakePayment(address _token, uint256 _amount) internal view returns (bool) {\n        return _getRemainingBudget(_token) >= _amount && vault.balance(_token) >= _amount;\n    }\n\n    function _getRemainingBudget(address _token) internal view returns (uint256) {\n        if (!settings.hasBudget[_token]) {\n            return MAX_UINT;\n        }\n\n        uint256 spent = periods[_currentPeriodId()].tokenStatement[_token].expenses;\n\n        // A budget decrease can cause the spent amount to be greater than period budget\n        // If so, return 0 to not allow more spending during period\n        if (spent >= settings.budgets[_token]) {\n            return 0;\n        }\n\n        return settings.budgets[_token].sub(spent);\n    }\n\n    function _currentPeriodId() internal view returns (uint64) {\n        // There is no way for this to overflow if protected by an initialization check\n        return periodsLength - 1;\n    }\n\n    // Must be view for mocking purposes\n    function getMaxPeriodTransitions() internal view returns (uint64) { return MAX_UINT64; }\n}\n",
  "sourcePath": "@aragon/apps-finance/contracts/Finance.sol",
  "ast": {
    "absolutePath": "@aragon/apps-finance/contracts/Finance.sol",
    "exportedSymbols": {
      "Finance": [
        2645
      ]
    },
    "id": 2646,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 836,
        "literals": [
          "solidity",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "57:23:3"
      },
      {
        "absolutePath": "@aragon/os/contracts/apps/AragonApp.sol",
        "file": "@aragon/os/contracts/apps/AragonApp.sol",
        "id": 837,
        "nodeType": "ImportDirective",
        "scope": 2646,
        "sourceUnit": 8476,
        "src": "82:49:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/EtherTokenConstant.sol",
        "file": "@aragon/os/contracts/common/EtherTokenConstant.sol",
        "id": 838,
        "nodeType": "ImportDirective",
        "scope": 2646,
        "sourceUnit": 8622,
        "src": "132:60:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/IsContract.sol",
        "file": "@aragon/os/contracts/common/IsContract.sol",
        "id": 839,
        "nodeType": "ImportDirective",
        "scope": 2646,
        "sourceUnit": 8790,
        "src": "193:52:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/lib/token/ERC20.sol",
        "file": "@aragon/os/contracts/lib/token/ERC20.sol",
        "id": 840,
        "nodeType": "ImportDirective",
        "scope": 2646,
        "sourceUnit": 11942,
        "src": "247:50:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/lib/math/SafeMath.sol",
        "file": "@aragon/os/contracts/lib/math/SafeMath.sol",
        "id": 841,
        "nodeType": "ImportDirective",
        "scope": 2646,
        "sourceUnit": 11712,
        "src": "298:52:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/lib/math/SafeMath64.sol",
        "file": "@aragon/os/contracts/lib/math/SafeMath64.sol",
        "id": 842,
        "nodeType": "ImportDirective",
        "scope": 2646,
        "sourceUnit": 11854,
        "src": "351:54:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/apps-vault/contracts/Vault.sol",
        "file": "@aragon/apps-vault/contracts/Vault.sol",
        "id": 843,
        "nodeType": "ImportDirective",
        "scope": 2646,
        "sourceUnit": 4918,
        "src": "407:48:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 844,
              "name": "EtherTokenConstant",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8621,
              "src": "478:18:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_EtherTokenConstant_$8621",
                "typeString": "contract EtherTokenConstant"
              }
            },
            "id": 845,
            "nodeType": "InheritanceSpecifier",
            "src": "478:18:3"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 846,
              "name": "IsContract",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8789,
              "src": "498:10:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IsContract_$8789",
                "typeString": "contract IsContract"
              }
            },
            "id": 847,
            "nodeType": "InheritanceSpecifier",
            "src": "498:10:3"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 848,
              "name": "AragonApp",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8475,
              "src": "510:9:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AragonApp_$8475",
                "typeString": "contract AragonApp"
              }
            },
            "id": 849,
            "nodeType": "InheritanceSpecifier",
            "src": "510:9:3"
          }
        ],
        "contractDependencies": [
          7585,
          8347,
          8475,
          8488,
          8621,
          8663,
          8761,
          8789,
          8822,
          8869,
          9066,
          9476,
          9503,
          10769
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 2645,
        "linearizedBaseContracts": [
          2645,
          8475,
          7585,
          9476,
          10769,
          9503,
          9066,
          8789,
          8621,
          8663,
          8488,
          8822,
          8761,
          8869,
          8347
        ],
        "name": "Finance",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 852,
            "libraryName": {
              "contractScope": null,
              "id": 850,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 11711,
              "src": "532:8:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$11711",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "526:27:3",
            "typeName": {
              "id": 851,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "545:7:3",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 855,
            "libraryName": {
              "contractScope": null,
              "id": 853,
              "name": "SafeMath64",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 11853,
              "src": "564:10:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath64_$11853",
                "typeString": "library SafeMath64"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "558:28:3",
            "typeName": {
              "id": 854,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "579:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            }
          },
          {
            "constant": true,
            "id": 860,
            "name": "CREATE_PAYMENTS_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "592:80:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 856,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "592:7:3",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "4352454154455f5041594d454e54535f524f4c45",
                  "id": 858,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "649:22:3",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_5de467a460382d13defdc02aacddc9c7d6605d6d4e0b8bd2f70732cae8ea17bc",
                    "typeString": "literal_string \"CREATE_PAYMENTS_ROLE\""
                  },
                  "value": "CREATE_PAYMENTS_ROLE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_5de467a460382d13defdc02aacddc9c7d6605d6d4e0b8bd2f70732cae8ea17bc",
                    "typeString": "literal_string \"CREATE_PAYMENTS_ROLE\""
                  }
                ],
                "id": 857,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 12664,
                "src": "639:9:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                  "typeString": "function () pure returns (bytes32)"
                }
              },
              "id": 859,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "639:33:3",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 865,
            "name": "CHANGE_PERIOD_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "678:76:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 861,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "678:7:3",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "4348414e47455f504552494f445f524f4c45",
                  "id": 863,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "733:20:3",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_d35e458bacdd5343c2f050f574554b2f417a8ea38d6a9a65ce2225dbe8bb9a9d",
                    "typeString": "literal_string \"CHANGE_PERIOD_ROLE\""
                  },
                  "value": "CHANGE_PERIOD_ROLE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_d35e458bacdd5343c2f050f574554b2f417a8ea38d6a9a65ce2225dbe8bb9a9d",
                    "typeString": "literal_string \"CHANGE_PERIOD_ROLE\""
                  }
                ],
                "id": 862,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 12664,
                "src": "723:9:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                  "typeString": "function () pure returns (bytes32)"
                }
              },
              "id": 864,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "723:31:3",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 870,
            "name": "CHANGE_BUDGETS_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "760:78:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 866,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "760:7:3",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "4348414e47455f425544474554535f524f4c45",
                  "id": 868,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "816:21:3",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_d79730e82bfef7d2f9639b9d10bf37ebb662b22ae2211502a00bdf7b2cc3a23a",
                    "typeString": "literal_string \"CHANGE_BUDGETS_ROLE\""
                  },
                  "value": "CHANGE_BUDGETS_ROLE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_d79730e82bfef7d2f9639b9d10bf37ebb662b22ae2211502a00bdf7b2cc3a23a",
                    "typeString": "literal_string \"CHANGE_BUDGETS_ROLE\""
                  }
                ],
                "id": 867,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 12664,
                "src": "806:9:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                  "typeString": "function () pure returns (bytes32)"
                }
              },
              "id": 869,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "806:32:3",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 875,
            "name": "EXECUTE_PAYMENTS_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "844:82:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 871,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "844:7:3",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "455845435554455f5041594d454e54535f524f4c45",
                  "id": 873,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "902:23:3",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_563165d3eae48bcb0a092543ca070d989169c98357e9a1b324ec5da44bab75fd",
                    "typeString": "literal_string \"EXECUTE_PAYMENTS_ROLE\""
                  },
                  "value": "EXECUTE_PAYMENTS_ROLE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_563165d3eae48bcb0a092543ca070d989169c98357e9a1b324ec5da44bab75fd",
                    "typeString": "literal_string \"EXECUTE_PAYMENTS_ROLE\""
                  }
                ],
                "id": 872,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 12664,
                "src": "892:9:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                  "typeString": "function () pure returns (bytes32)"
                }
              },
              "id": 874,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "892:34:3",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 880,
            "name": "MANAGE_PAYMENTS_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "932:80:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 876,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "932:7:3",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "4d414e4147455f5041594d454e54535f524f4c45",
                  "id": 878,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "989:22:3",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_30597dd103acfaef0649675953d9cb22faadab7e9d9ed57acc1c429d04b80777",
                    "typeString": "literal_string \"MANAGE_PAYMENTS_ROLE\""
                  },
                  "value": "MANAGE_PAYMENTS_ROLE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_30597dd103acfaef0649675953d9cb22faadab7e9d9ed57acc1c429d04b80777",
                    "typeString": "literal_string \"MANAGE_PAYMENTS_ROLE\""
                  }
                ],
                "id": 877,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 12664,
                "src": "979:9:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                  "typeString": "function () pure returns (bytes32)"
                }
              },
              "id": 879,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "979:33:3",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 883,
            "name": "NO_PAYMENT",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "1019:40:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 881,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1019:7:3",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30",
              "id": 882,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1058:1:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
              },
              "value": "0"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 886,
            "name": "NO_TRANSACTION",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "1065:44:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 884,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1065:7:3",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30",
              "id": 885,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1108:1:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
              },
              "value": "0"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 889,
            "name": "MAX_PAYMENTS_PER_TX",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "1115:50:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 887,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1115:7:3",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3230",
              "id": 888,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1163:2:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_20_by_1",
                "typeString": "int_const 20"
              },
              "value": "20"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 895,
            "name": "MAX_UINT",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "1171:48:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 890,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1171:7:3",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "id": 893,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "nodeType": "UnaryOperation",
                  "operator": "-",
                  "prefix": true,
                  "src": "1216:2:3",
                  "subExpression": {
                    "argumentTypes": null,
                    "hexValue": "31",
                    "id": 892,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1217:1:3",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    },
                    "value": "1"
                  },
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_-1_by_1",
                    "typeString": "int_const -1"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_rational_-1_by_1",
                    "typeString": "int_const -1"
                  }
                ],
                "id": 891,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1208:7:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_uint256_$",
                  "typeString": "type(uint256)"
                },
                "typeName": "uint256"
              },
              "id": 894,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1208:11:3",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 901,
            "name": "MAX_UINT64",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "1225:48:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 896,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "1225:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "id": 899,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "nodeType": "UnaryOperation",
                  "operator": "-",
                  "prefix": true,
                  "src": "1270:2:3",
                  "subExpression": {
                    "argumentTypes": null,
                    "hexValue": "31",
                    "id": 898,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1271:1:3",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    },
                    "value": "1"
                  },
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_-1_by_1",
                    "typeString": "int_const -1"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_rational_-1_by_1",
                    "typeString": "int_const -1"
                  }
                ],
                "id": 897,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1263:6:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_uint64_$",
                  "typeString": "type(uint64)"
                },
                "typeName": "uint64"
              },
              "id": 900,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1263:10:3",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 904,
            "name": "ERROR_COMPLETE_TRANSITION",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "1280:81:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 902,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1280:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f434f4d504c4554455f5452414e534954494f4e",
              "id": 903,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1332:29:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_22ec6e0c3735a2fda2fb445836cfebb8537041a148155716f86965a81552ecaf",
                "typeString": "literal_string \"FINANCE_COMPLETE_TRANSITION\""
              },
              "value": "FINANCE_COMPLETE_TRANSITION"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 907,
            "name": "ERROR_NO_PAYMENT",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "1367:63:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 905,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1367:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f4e4f5f5041594d454e54",
              "id": 906,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1410:20:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_097ee68ce4c2babfac12a140bd18665f10bf8280cce5c7ff1e952d5f8cf29b31",
                "typeString": "literal_string \"FINANCE_NO_PAYMENT\""
              },
              "value": "FINANCE_NO_PAYMENT"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 910,
            "name": "ERROR_NO_TRANSACTION",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "1436:71:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 908,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1436:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f4e4f5f5452414e53414354494f4e",
              "id": 909,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1483:24:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_b1e87dfa63a7fa93fbf96eab40f01b7e057a0ce0eb12da8a36d7a9b3584faaea",
                "typeString": "literal_string \"FINANCE_NO_TRANSACTION\""
              },
              "value": "FINANCE_NO_TRANSACTION"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 913,
            "name": "ERROR_NO_PERIOD",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "1513:61:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 911,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1513:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f4e4f5f504552494f44",
              "id": 912,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1555:19:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_d1c462d5c2112fe4829843683286df794144b893d493bfb3a201b032dcb0798d",
                "typeString": "literal_string \"FINANCE_NO_PERIOD\""
              },
              "value": "FINANCE_NO_PERIOD"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 916,
            "name": "ERROR_VAULT_NOT_CONTRACT",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "1580:79:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 914,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1580:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f5641554c545f4e4f545f434f4e5452414354",
              "id": 915,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1631:28:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_4f6ce1beb4b1acc923ed553912415389acce4c55b09f8dc923ab624929c3ac7c",
                "typeString": "literal_string \"FINANCE_VAULT_NOT_CONTRACT\""
              },
              "value": "FINANCE_VAULT_NOT_CONTRACT"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 919,
            "name": "ERROR_INIT_PERIOD_TOO_SHORT",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "1665:85:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 917,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1665:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f494e49545f504552494f445f544f4f5f53484f5254",
              "id": 918,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1719:31:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_6c0b8b23c62f6e78082b7c3cd5e34af82e265c8bdab0d4fb552c9c00ab866e5b",
                "typeString": "literal_string \"FINANCE_INIT_PERIOD_TOO_SHORT\""
              },
              "value": "FINANCE_INIT_PERIOD_TOO_SHORT"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 922,
            "name": "ERROR_SET_PERIOD_TOO_SHORT",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "1756:83:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 920,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1756:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f5345545f504552494f445f544f4f5f53484f5254",
              "id": 921,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1809:30:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_d68defbc73c3fc3b3e56745e5b7eaa34c1c02c77f264f84307ede2a4bbf3aa49",
                "typeString": "literal_string \"FINANCE_SET_PERIOD_TOO_SHORT\""
              },
              "value": "FINANCE_SET_PERIOD_TOO_SHORT"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 925,
            "name": "ERROR_NEW_PAYMENT_AMOUNT_ZERO",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "1845:89:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 923,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1845:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f4e45575f5041594d454e545f414d4f554e545f5a45524f",
              "id": 924,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1901:33:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_77e3e6c5ab0615514c67af6bb792233c16dfdd95d1c126ef1d02c6fc997e658c",
                "typeString": "literal_string \"FINANCE_NEW_PAYMENT_AMOUNT_ZERO\""
              },
              "value": "FINANCE_NEW_PAYMENT_AMOUNT_ZERO"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 928,
            "name": "ERROR_RECOVER_AMOUNT_ZERO",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "1940:81:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 926,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1940:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f5245434f5645525f414d4f554e545f5a45524f",
              "id": 927,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1992:29:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_887cdae74ca676db86e5ff884d1ed487026a75a5ff2e355b97032d51731277ea",
                "typeString": "literal_string \"FINANCE_RECOVER_AMOUNT_ZERO\""
              },
              "value": "FINANCE_RECOVER_AMOUNT_ZERO"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 931,
            "name": "ERROR_DEPOSIT_AMOUNT_ZERO",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "2027:81:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 929,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2027:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f4445504f5349545f414d4f554e545f5a45524f",
              "id": 930,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2079:29:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_6610a3bc46bba63f677fa7f08e3ad8e90ebdf9830290f8fc7b863aca074b39e4",
                "typeString": "literal_string \"FINANCE_DEPOSIT_AMOUNT_ZERO\""
              },
              "value": "FINANCE_DEPOSIT_AMOUNT_ZERO"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 934,
            "name": "ERROR_BUDGET",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "2114:55:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 932,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2114:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f425544474554",
              "id": 933,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2153:16:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_a3b0fd663c3f091445c9d2b484685b6976e216ee84e292e1bc26c5f6eb18212d",
                "typeString": "literal_string \"FINANCE_BUDGET\""
              },
              "value": "FINANCE_BUDGET"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 937,
            "name": "ERROR_EXECUTE_PAYMENT_TIME",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "2175:83:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 935,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2175:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f455845435554455f5041594d454e545f54494d45",
              "id": 936,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2228:30:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_c1a736e94274378373cef5c66f5657bcfa50659c24581a0a4bfa668c04678317",
                "typeString": "literal_string \"FINANCE_EXECUTE_PAYMENT_TIME\""
              },
              "value": "FINANCE_EXECUTE_PAYMENT_TIME"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 940,
            "name": "ERROR_RECEIVER_EXECUTE_PAYMENT_TIME",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "2264:94:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 938,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2264:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f524356525f455845435f5041594d454e545f54494d45",
              "id": 939,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2326:32:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_610c5359845dd9df181d8e36774742a83b76dadea5e8ffea780a6d145dcf57a7",
                "typeString": "literal_string \"FINANCE_RCVR_EXEC_PAYMENT_TIME\""
              },
              "value": "FINANCE_RCVR_EXEC_PAYMENT_TIME"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 943,
            "name": "ERROR_PAYMENT_RECEIVER",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "2364:75:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 941,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2364:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f5041594d454e545f5245434549564552",
              "id": 942,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2413:26:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_e67182ceb919bc28f0bcb16889270f6f64025682424ceb6843d8119099dbeace",
                "typeString": "literal_string \"FINANCE_PAYMENT_RECEIVER\""
              },
              "value": "FINANCE_PAYMENT_RECEIVER"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 946,
            "name": "ERROR_TOKEN_TRANSFER_FROM_REVERTED",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "2445:95:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 944,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2445:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f544b4e5f5452414e534645525f46524f4d5f524556455254",
              "id": 945,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2506:34:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_dcfc1e5582a28e8a93ed58d8b479e8e1dc0c60309652fb2fd25bee148aa0e19b",
                "typeString": "literal_string \"FINANCE_TKN_TRANSFER_FROM_REVERT\""
              },
              "value": "FINANCE_TKN_TRANSFER_FROM_REVERT"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 949,
            "name": "ERROR_VALUE_MISMATCH",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "2546:71:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 947,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2546:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f56414c55455f4d49534d41544348",
              "id": 948,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2593:24:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_e77a6644fa5b5ed3e09b48074fb50f23962418beb9122c59e0121ea12123bda3",
                "typeString": "literal_string \"FINANCE_VALUE_MISMATCH\""
              },
              "value": "FINANCE_VALUE_MISMATCH"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 952,
            "name": "ERROR_PAYMENT_INACTIVE",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "2623:75:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 950,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2623:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f5041594d454e545f494e414354495645",
              "id": 951,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2672:26:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_fb1c85406dbe021dd2fbe569dc1b5134d310d7a785d47610fefcc3150d54bbd0",
                "typeString": "literal_string \"FINANCE_PAYMENT_INACTIVE\""
              },
              "value": "FINANCE_PAYMENT_INACTIVE"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 955,
            "name": "ERROR_REMAINING_BUDGET",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "2704:75:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 953,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2704:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f52454d41494e494e475f425544474554",
              "id": 954,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2753:26:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_2e378b1bab04e94af1aa86ea6fa9f5c8d9dee3ed82f1b4706d4b3e19e606de9c",
                "typeString": "literal_string \"FINANCE_REMAINING_BUDGET\""
              },
              "value": "FINANCE_REMAINING_BUDGET"
            },
            "visibility": "private"
          },
          {
            "canonicalName": "Finance.Payment",
            "id": 974,
            "members": [
              {
                "constant": false,
                "id": 957,
                "name": "token",
                "nodeType": "VariableDeclaration",
                "scope": 974,
                "src": "2846:13:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 956,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "2846:7:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 959,
                "name": "receiver",
                "nodeType": "VariableDeclaration",
                "scope": 974,
                "src": "2869:16:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 958,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "2869:7:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 961,
                "name": "createdBy",
                "nodeType": "VariableDeclaration",
                "scope": 974,
                "src": "2895:17:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 960,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "2895:7:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 963,
                "name": "inactive",
                "nodeType": "VariableDeclaration",
                "scope": 974,
                "src": "2922:13:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 962,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "2922:4:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 965,
                "name": "amount",
                "nodeType": "VariableDeclaration",
                "scope": 974,
                "src": "2945:14:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 964,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2945:7:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 967,
                "name": "initialPaymentTime",
                "nodeType": "VariableDeclaration",
                "scope": 974,
                "src": "2969:25:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 966,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "2969:6:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 969,
                "name": "interval",
                "nodeType": "VariableDeclaration",
                "scope": 974,
                "src": "3004:15:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 968,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3004:6:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 971,
                "name": "maxRepeats",
                "nodeType": "VariableDeclaration",
                "scope": 974,
                "src": "3029:17:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 970,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3029:6:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 973,
                "name": "repeats",
                "nodeType": "VariableDeclaration",
                "scope": 974,
                "src": "3056:14:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 972,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3056:6:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Payment",
            "nodeType": "StructDefinition",
            "scope": 2645,
            "src": "2821:256:3",
            "visibility": "public"
          },
          {
            "canonicalName": "Finance.Transaction",
            "id": 991,
            "members": [
              {
                "constant": false,
                "id": 976,
                "name": "token",
                "nodeType": "VariableDeclaration",
                "scope": 991,
                "src": "3147:13:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 975,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "3147:7:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 978,
                "name": "entity",
                "nodeType": "VariableDeclaration",
                "scope": 991,
                "src": "3170:14:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 977,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "3170:7:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 980,
                "name": "isIncoming",
                "nodeType": "VariableDeclaration",
                "scope": 991,
                "src": "3194:15:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 979,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "3194:4:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 982,
                "name": "amount",
                "nodeType": "VariableDeclaration",
                "scope": 991,
                "src": "3219:14:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 981,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3219:7:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 984,
                "name": "paymentId",
                "nodeType": "VariableDeclaration",
                "scope": 991,
                "src": "3243:17:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 983,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3243:7:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 986,
                "name": "paymentRepeatNumber",
                "nodeType": "VariableDeclaration",
                "scope": 991,
                "src": "3270:26:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 985,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3270:6:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 988,
                "name": "date",
                "nodeType": "VariableDeclaration",
                "scope": 991,
                "src": "3306:11:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 987,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3306:6:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 990,
                "name": "periodId",
                "nodeType": "VariableDeclaration",
                "scope": 991,
                "src": "3327:15:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 989,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3327:6:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Transaction",
            "nodeType": "StructDefinition",
            "scope": 2645,
            "src": "3118:231:3",
            "visibility": "public"
          },
          {
            "canonicalName": "Finance.TokenStatement",
            "id": 996,
            "members": [
              {
                "constant": false,
                "id": 993,
                "name": "expenses",
                "nodeType": "VariableDeclaration",
                "scope": 996,
                "src": "3387:16:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 992,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3387:7:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 995,
                "name": "income",
                "nodeType": "VariableDeclaration",
                "scope": 996,
                "src": "3413:14:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 994,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3413:7:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "TokenStatement",
            "nodeType": "StructDefinition",
            "scope": 2645,
            "src": "3355:79:3",
            "visibility": "public"
          },
          {
            "canonicalName": "Finance.Period",
            "id": 1009,
            "members": [
              {
                "constant": false,
                "id": 998,
                "name": "startTime",
                "nodeType": "VariableDeclaration",
                "scope": 1009,
                "src": "3464:16:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 997,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3464:6:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1000,
                "name": "endTime",
                "nodeType": "VariableDeclaration",
                "scope": 1009,
                "src": "3490:14:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 999,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3490:6:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1002,
                "name": "firstTransactionId",
                "nodeType": "VariableDeclaration",
                "scope": 1009,
                "src": "3514:26:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1001,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3514:7:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1004,
                "name": "lastTransactionId",
                "nodeType": "VariableDeclaration",
                "scope": 1009,
                "src": "3550:25:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1003,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3550:7:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1008,
                "name": "tokenStatement",
                "nodeType": "VariableDeclaration",
                "scope": 1009,
                "src": "3586:50:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TokenStatement_$996_storage_$",
                  "typeString": "mapping(address => struct Finance.TokenStatement)"
                },
                "typeName": {
                  "id": 1007,
                  "keyType": {
                    "id": 1005,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3595:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "3586:35:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TokenStatement_$996_storage_$",
                    "typeString": "mapping(address => struct Finance.TokenStatement)"
                  },
                  "valueType": {
                    "contractScope": null,
                    "id": 1006,
                    "name": "TokenStatement",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 996,
                    "src": "3606:14:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TokenStatement_$996_storage_ptr",
                      "typeString": "struct Finance.TokenStatement"
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Period",
            "nodeType": "StructDefinition",
            "scope": 2645,
            "src": "3440:203:3",
            "visibility": "public"
          },
          {
            "canonicalName": "Finance.Settings",
            "id": 1020,
            "members": [
              {
                "constant": false,
                "id": 1011,
                "name": "periodDuration",
                "nodeType": "VariableDeclaration",
                "scope": 1020,
                "src": "3675:21:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 1010,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3675:6:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1015,
                "name": "budgets",
                "nodeType": "VariableDeclaration",
                "scope": 1020,
                "src": "3706:36:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                  "typeString": "mapping(address => uint256)"
                },
                "typeName": {
                  "id": 1014,
                  "keyType": {
                    "id": 1012,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3715:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "3706:28:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "valueType": {
                    "id": 1013,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3726:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1019,
                "name": "hasBudget",
                "nodeType": "VariableDeclaration",
                "scope": 1020,
                "src": "3752:35:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                  "typeString": "mapping(address => bool)"
                },
                "typeName": {
                  "id": 1018,
                  "keyType": {
                    "id": 1016,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3761:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "3752:25:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                    "typeString": "mapping(address => bool)"
                  },
                  "valueType": {
                    "id": 1017,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3772:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Settings",
            "nodeType": "StructDefinition",
            "scope": 2645,
            "src": "3649:145:3",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1022,
            "name": "vault",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "3800:18:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Vault_$4917",
              "typeString": "contract Vault"
            },
            "typeName": {
              "contractScope": null,
              "id": 1021,
              "name": "Vault",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4917,
              "src": "3800:5:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Vault_$4917",
                "typeString": "contract Vault"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1024,
            "name": "settings",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "3824:26:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Settings_$1020_storage",
              "typeString": "struct Finance.Settings"
            },
            "typeName": {
              "contractScope": null,
              "id": 1023,
              "name": "Settings",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1020,
              "src": "3824:8:3",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Settings_$1020_storage_ptr",
                "typeString": "struct Finance.Settings"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 1028,
            "name": "payments",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "3946:46:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Payment_$974_storage_$",
              "typeString": "mapping(uint256 => struct Finance.Payment)"
            },
            "typeName": {
              "id": 1027,
              "keyType": {
                "id": 1025,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "3955:7:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "3946:28:3",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Payment_$974_storage_$",
                "typeString": "mapping(uint256 => struct Finance.Payment)"
              },
              "valueType": {
                "contractScope": null,
                "id": 1026,
                "name": "Payment",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 974,
                "src": "3966:7:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                  "typeString": "struct Finance.Payment"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 1030,
            "name": "paymentsNextIndex",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "4130:32:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 1029,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "4130:7:3",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1034,
            "name": "transactions",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "4169:54:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Transaction_$991_storage_$",
              "typeString": "mapping(uint256 => struct Finance.Transaction)"
            },
            "typeName": {
              "id": 1033,
              "keyType": {
                "id": 1031,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "4178:7:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "4169:32:3",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Transaction_$991_storage_$",
                "typeString": "mapping(uint256 => struct Finance.Transaction)"
              },
              "valueType": {
                "contractScope": null,
                "id": 1032,
                "name": "Transaction",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 991,
                "src": "4189:11:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                  "typeString": "struct Finance.Transaction"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 1036,
            "name": "transactionsNextIndex",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "4229:36:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 1035,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "4229:7:3",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1040,
            "name": "periods",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "4272:43:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$1009_storage_$",
              "typeString": "mapping(uint64 => struct Finance.Period)"
            },
            "typeName": {
              "id": 1039,
              "keyType": {
                "id": 1037,
                "name": "uint64",
                "nodeType": "ElementaryTypeName",
                "src": "4281:6:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                }
              },
              "nodeType": "Mapping",
              "src": "4272:26:3",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$1009_storage_$",
                "typeString": "mapping(uint64 => struct Finance.Period)"
              },
              "valueType": {
                "contractScope": null,
                "id": 1038,
                "name": "Period",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 1009,
                "src": "4291:6:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                  "typeString": "struct Finance.Period"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 1042,
            "name": "periodsLength",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "4321:27:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 1041,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "4321:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1050,
            "name": "NewPeriod",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1049,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1044,
                  "indexed": true,
                  "name": "periodId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1050,
                  "src": "4371:23:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1043,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "4371:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1046,
                  "indexed": false,
                  "name": "periodStarts",
                  "nodeType": "VariableDeclaration",
                  "scope": 1050,
                  "src": "4396:19:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1045,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "4396:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1048,
                  "indexed": false,
                  "name": "periodEnds",
                  "nodeType": "VariableDeclaration",
                  "scope": 1050,
                  "src": "4417:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1047,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "4417:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4370:65:3"
            },
            "src": "4355:81:3"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1058,
            "name": "SetBudget",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1057,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1052,
                  "indexed": true,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 1058,
                  "src": "4457:21:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1051,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4457:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1054,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1058,
                  "src": "4480:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1053,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4480:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1056,
                  "indexed": false,
                  "name": "hasBudget",
                  "nodeType": "VariableDeclaration",
                  "scope": 1058,
                  "src": "4496:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1055,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4496:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4456:55:3"
            },
            "src": "4441:71:3"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1068,
            "name": "NewPayment",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1067,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1060,
                  "indexed": true,
                  "name": "paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1068,
                  "src": "4534:25:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1059,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4534:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1062,
                  "indexed": true,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 1068,
                  "src": "4561:25:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1061,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4561:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1064,
                  "indexed": false,
                  "name": "maxRepeats",
                  "nodeType": "VariableDeclaration",
                  "scope": 1068,
                  "src": "4588:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1063,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "4588:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1066,
                  "indexed": false,
                  "name": "reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 1068,
                  "src": "4607:16:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1065,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "4607:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4533:91:3"
            },
            "src": "4517:108:3"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1080,
            "name": "NewTransaction",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1079,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1070,
                  "indexed": true,
                  "name": "transactionId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1080,
                  "src": "4651:29:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1069,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4651:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1072,
                  "indexed": false,
                  "name": "incoming",
                  "nodeType": "VariableDeclaration",
                  "scope": 1080,
                  "src": "4682:13:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1071,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4682:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1074,
                  "indexed": true,
                  "name": "entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 1080,
                  "src": "4697:22:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1073,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4697:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1076,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1080,
                  "src": "4721:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1075,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4721:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1078,
                  "indexed": false,
                  "name": "reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 1080,
                  "src": "4737:16:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1077,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "4737:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4650:104:3"
            },
            "src": "4630:125:3"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1086,
            "name": "ChangePaymentState",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1085,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1082,
                  "indexed": true,
                  "name": "paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1086,
                  "src": "4785:25:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1081,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4785:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1084,
                  "indexed": false,
                  "name": "inactive",
                  "nodeType": "VariableDeclaration",
                  "scope": 1086,
                  "src": "4812:13:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1083,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4812:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4784:42:3"
            },
            "src": "4760:67:3"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1090,
            "name": "ChangePeriodDuration",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1089,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1088,
                  "indexed": false,
                  "name": "newDuration",
                  "nodeType": "VariableDeclaration",
                  "scope": 1090,
                  "src": "4859:18:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1087,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "4859:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4858:20:3"
            },
            "src": "4832:47:3"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1094,
            "name": "PaymentFailure",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1093,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1092,
                  "indexed": false,
                  "name": "paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1094,
                  "src": "4905:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1091,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4905:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4904:19:3"
            },
            "src": "4884:40:3"
          },
          {
            "body": {
              "id": 1109,
              "nodeType": "Block",
              "src": "5168:175:3",
              "statements": [
                {
                  "assignments": [
                    1097
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1097,
                      "name": "completeTransition",
                      "nodeType": "VariableDeclaration",
                      "scope": 1110,
                      "src": "5178:23:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1096,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "5178:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1102,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1099,
                          "name": "getMaxPeriodTransitions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2644,
                          "src": "5235:23:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                            "typeString": "function () view returns (uint64)"
                          }
                        },
                        "id": 1100,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5235:25:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 1098,
                      "name": "_tryTransitionAccountingPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2557,
                      "src": "5204:30:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (uint256) returns (bool)"
                      }
                    },
                    "id": 1101,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5204:57:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5178:83:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1104,
                        "name": "completeTransition",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1097,
                        "src": "5279:18:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1105,
                        "name": "ERROR_COMPLETE_TRANSITION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 904,
                        "src": "5299:25:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1103,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "5271:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1106,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5271:54:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1107,
                  "nodeType": "ExpressionStatement",
                  "src": "5271:54:3"
                },
                {
                  "id": 1108,
                  "nodeType": "PlaceholderStatement",
                  "src": "5335:1:3"
                }
              ]
            },
            "documentation": null,
            "id": 1110,
            "name": "transitionsPeriod",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 1095,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5168:0:3"
            },
            "src": "5141:202:3",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1126,
              "nodeType": "Block",
              "src": "5392:103:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 1121,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1117,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1115,
                            "name": "_paymentId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1112,
                            "src": "5410:10:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1116,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5423:1:3",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "5410:14:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1120,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1118,
                            "name": "_paymentId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1112,
                            "src": "5428:10:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1119,
                            "name": "paymentsNextIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1030,
                            "src": "5441:17:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5428:30:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "5410:48:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1122,
                        "name": "ERROR_NO_PAYMENT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 907,
                        "src": "5460:16:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1114,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "5402:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1123,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5402:75:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1124,
                  "nodeType": "ExpressionStatement",
                  "src": "5402:75:3"
                },
                {
                  "id": 1125,
                  "nodeType": "PlaceholderStatement",
                  "src": "5487:1:3"
                }
              ]
            },
            "documentation": null,
            "id": 1127,
            "name": "paymentExists",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 1113,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1112,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1127,
                  "src": "5372:18:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1111,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5372:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5371:20:3"
            },
            "src": "5349:146:3",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1143,
              "nodeType": "Block",
              "src": "5552:119:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 1138,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1134,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1132,
                            "name": "_transactionId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1129,
                            "src": "5570:14:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1133,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5587:1:3",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "5570:18:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1137,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1135,
                            "name": "_transactionId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1129,
                            "src": "5592:14:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1136,
                            "name": "transactionsNextIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1036,
                            "src": "5609:21:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5592:38:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "5570:60:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1139,
                        "name": "ERROR_NO_TRANSACTION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 910,
                        "src": "5632:20:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1131,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "5562:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1140,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5562:91:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1141,
                  "nodeType": "ExpressionStatement",
                  "src": "5562:91:3"
                },
                {
                  "id": 1142,
                  "nodeType": "PlaceholderStatement",
                  "src": "5663:1:3"
                }
              ]
            },
            "documentation": null,
            "id": 1144,
            "name": "transactionExists",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 1130,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1129,
                  "name": "_transactionId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1144,
                  "src": "5528:22:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1128,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5528:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5527:24:3"
            },
            "src": "5501:170:3",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1156,
              "nodeType": "Block",
              "src": "5717:79:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 1151,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1149,
                          "name": "_periodId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1146,
                          "src": "5735:9:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1150,
                          "name": "periodsLength",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1042,
                          "src": "5747:13:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "5735:25:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1152,
                        "name": "ERROR_NO_PERIOD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 913,
                        "src": "5762:15:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1148,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "5727:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1153,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5727:51:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1154,
                  "nodeType": "ExpressionStatement",
                  "src": "5727:51:3"
                },
                {
                  "id": 1155,
                  "nodeType": "PlaceholderStatement",
                  "src": "5788:1:3"
                }
              ]
            },
            "documentation": null,
            "id": 1157,
            "name": "periodExists",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 1147,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1146,
                  "name": "_periodId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1157,
                  "src": "5699:16:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1145,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "5699:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5698:18:3"
            },
            "src": "5677:119:3",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1174,
              "nodeType": "Block",
              "src": "6035:162:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1165,
                        "name": "ETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8620,
                        "src": "6067:3:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1166,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12670,
                          "src": "6084:3:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1167,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6084:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4574686572207472616e7366657220746f2046696e616e636520617070",
                        "id": 1168,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6107:31:3",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b57949719489bee78e854a942ae31977cce66e975e0c81334ace426f675b89a8",
                          "typeString": "literal_string \"Ether transfer to Finance app\""
                        },
                        "value": "Ether transfer to Finance app"
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1169,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12670,
                          "src": "6152:3:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1170,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6152:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "74727565",
                        "id": 1171,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6176:4:3",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b57949719489bee78e854a942ae31977cce66e975e0c81334ace426f675b89a8",
                          "typeString": "literal_string \"Ether transfer to Finance app\""
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1164,
                      "name": "_deposit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2152,
                      "src": "6045:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_string_memory_ptr_$_t_address_$_t_bool_$returns$__$",
                        "typeString": "function (address,uint256,string memory,address,bool)"
                      }
                    },
                    "id": 1172,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6045:145:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1173,
                  "nodeType": "ExpressionStatement",
                  "src": "6045:145:3"
                }
              ]
            },
            "documentation": "@dev Sends ETH to Vault. Sends all the available balance.\n@notice Deposit ETH to the Vault, to avoid locking them in this Finance app forever",
            "id": 1175,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 1160,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1159,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8703,
                  "src": "6003:13:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6003:13:3"
              },
              {
                "arguments": null,
                "id": 1162,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1161,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1110,
                  "src": "6017:17:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6017:17:3"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1158,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5983:2:3"
            },
            "payable": true,
            "returnParameters": {
              "id": 1163,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6035:0:3"
            },
            "scope": 2645,
            "src": "5974:223:3",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1231,
              "nodeType": "Block",
              "src": "6552:633:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 1184,
                      "name": "initialized",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8746,
                      "src": "6562:11:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 1185,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6562:13:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1186,
                  "nodeType": "ExpressionStatement",
                  "src": "6562:13:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1189,
                            "name": "_vault",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1177,
                            "src": "6605:6:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Vault_$4917",
                              "typeString": "contract Vault"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Vault_$4917",
                              "typeString": "contract Vault"
                            }
                          ],
                          "id": 1188,
                          "name": "isContract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8788,
                          "src": "6594:10:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 1190,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6594:18:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1191,
                        "name": "ERROR_VAULT_NOT_CONTRACT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 916,
                        "src": "6614:24:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1187,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "6586:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1192,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6586:53:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1193,
                  "nodeType": "ExpressionStatement",
                  "src": "6586:53:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1196,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1194,
                      "name": "vault",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1022,
                      "src": "6649:5:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Vault_$4917",
                        "typeString": "contract Vault"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1195,
                      "name": "_vault",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1177,
                      "src": "6657:6:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Vault_$4917",
                        "typeString": "contract Vault"
                      }
                    },
                    "src": "6649:14:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Vault_$4917",
                      "typeString": "contract Vault"
                    }
                  },
                  "id": 1197,
                  "nodeType": "ExpressionStatement",
                  "src": "6649:14:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 1201,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1199,
                          "name": "_periodDuration",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1179,
                          "src": "6682:15:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 1200,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6701:6:3",
                          "subdenomination": "days",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_86400_by_1",
                            "typeString": "int_const 86400"
                          },
                          "value": "1"
                        },
                        "src": "6682:25:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1202,
                        "name": "ERROR_INIT_PERIOD_TOO_SHORT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 919,
                        "src": "6709:27:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1198,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "6674:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1203,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6674:63:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1204,
                  "nodeType": "ExpressionStatement",
                  "src": "6674:63:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1209,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1205,
                        "name": "settings",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1024,
                        "src": "6747:8:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Settings_$1020_storage",
                          "typeString": "struct Finance.Settings storage ref"
                        }
                      },
                      "id": 1207,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "periodDuration",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "6747:23:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1208,
                      "name": "_periodDuration",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1179,
                      "src": "6773:15:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "6747:41:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1210,
                  "nodeType": "ExpressionStatement",
                  "src": "6747:41:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1216,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1211,
                          "name": "payments",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1028,
                          "src": "6912:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Payment_$974_storage_$",
                            "typeString": "mapping(uint256 => struct Finance.Payment storage ref)"
                          }
                        },
                        "id": 1213,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1212,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6921:1:3",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "6912:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage",
                          "typeString": "struct Finance.Payment storage ref"
                        }
                      },
                      "id": 1214,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "inactive",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 963,
                      "src": "6912:20:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 1215,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6935:4:3",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "6912:27:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1217,
                  "nodeType": "ExpressionStatement",
                  "src": "6912:27:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1220,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1218,
                      "name": "paymentsNextIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1030,
                      "src": "6949:17:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 1219,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6969:1:3",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "6949:21:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1221,
                  "nodeType": "ExpressionStatement",
                  "src": "6949:21:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1224,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1222,
                      "name": "transactionsNextIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1036,
                      "src": "7080:21:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 1223,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7104:1:3",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "7080:25:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1225,
                  "nodeType": "ExpressionStatement",
                  "src": "7080:25:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1227,
                          "name": "getTimestamp64",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8868,
                          "src": "7161:14:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                            "typeString": "function () view returns (uint64)"
                          }
                        },
                        "id": 1228,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7161:16:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 1226,
                      "name": "_newPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2211,
                      "src": "7150:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint64_$returns$_t_struct$_Period_$1009_storage_ptr_$",
                        "typeString": "function (uint64) returns (struct Finance.Period storage pointer)"
                      }
                    },
                    "id": 1229,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7150:28:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                      "typeString": "struct Finance.Period storage pointer"
                    }
                  },
                  "id": 1230,
                  "nodeType": "ExpressionStatement",
                  "src": "7150:28:3"
                }
              ]
            },
            "documentation": "@notice Initialize Finance app for Vault at `_vault` with period length of `@transformTime(_periodDuration)`\n@param _vault Address of the vault Finance will rely on (non changeable)\n@param _periodDuration Duration in seconds of each period",
            "id": 1232,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 1182,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1181,
                  "name": "onlyInit",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8693,
                  "src": "6543:8:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6543:8:3"
              }
            ],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1180,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1177,
                  "name": "_vault",
                  "nodeType": "VariableDeclaration",
                  "scope": 1232,
                  "src": "6496:12:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Vault_$4917",
                    "typeString": "contract Vault"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1176,
                    "name": "Vault",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4917,
                    "src": "6496:5:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Vault_$4917",
                      "typeString": "contract Vault"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1179,
                  "name": "_periodDuration",
                  "nodeType": "VariableDeclaration",
                  "scope": 1232,
                  "src": "6510:22:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1178,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "6510:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6495:38:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1183,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6552:0:3"
            },
            "scope": 2645,
            "src": "6476:709:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1254,
              "nodeType": "Block",
              "src": "7563:142:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1246,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1234,
                        "src": "7595:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1247,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1236,
                        "src": "7615:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1248,
                        "name": "_reference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1238,
                        "src": "7636:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1249,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12670,
                          "src": "7660:3:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1250,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "7660:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "74727565",
                        "id": 1251,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7684:4:3",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1245,
                      "name": "_deposit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2152,
                      "src": "7573:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_string_memory_ptr_$_t_address_$_t_bool_$returns$__$",
                        "typeString": "function (address,uint256,string memory,address,bool)"
                      }
                    },
                    "id": 1252,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7573:125:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1253,
                  "nodeType": "ExpressionStatement",
                  "src": "7573:125:3"
                }
              ]
            },
            "documentation": "@dev Deposit for approved ERC20 tokens or ETH\n@notice Deposit `@tokenAmount(_token, _amount)`\n@param _token Address of deposited token\n@param _amount Amount of tokens sent\n@param _reference Reason for payment",
            "id": 1255,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 1241,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1240,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8703,
                  "src": "7531:13:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7531:13:3"
              },
              {
                "arguments": null,
                "id": 1243,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1242,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1110,
                  "src": "7545:17:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7545:17:3"
              }
            ],
            "name": "deposit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1239,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1234,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 1255,
                  "src": "7462:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1233,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7462:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1236,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1255,
                  "src": "7478:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1235,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7478:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1238,
                  "name": "_reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 1255,
                  "src": "7495:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1237,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "7495:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7461:52:3"
            },
            "payable": true,
            "returnParameters": {
              "id": 1244,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7563:0:3"
            },
            "scope": 2645,
            "src": "7445:260:3",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1402,
              "nodeType": "Block",
              "src": "8785:1303:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1289,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1287,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1261,
                          "src": "8803:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1288,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8813:1:3",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "8803:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1290,
                        "name": "ERROR_NEW_PAYMENT_AMOUNT_ZERO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 925,
                        "src": "8816:29:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1286,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "8795:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1291,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8795:51:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1292,
                  "nodeType": "ExpressionStatement",
                  "src": "8795:51:3"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 1300,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "id": 1296,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1293,
                        "name": "_initialPaymentTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1263,
                        "src": "8928:19:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1294,
                          "name": "getTimestamp64",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8868,
                          "src": "8951:14:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                            "typeString": "function () view returns (uint64)"
                          }
                        },
                        "id": 1295,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8951:16:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "src": "8928:39:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "id": 1299,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1297,
                        "name": "_maxRepeats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1267,
                        "src": "8971:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 1298,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8986:1:3",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "8971:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "8928:59:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1312,
                  "nodeType": "IfStatement",
                  "src": "8924:392:3",
                  "trueBody": {
                    "id": 1311,
                    "nodeType": "Block",
                    "src": "8989:327:3",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1302,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1257,
                              "src": "9044:6:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1303,
                              "name": "_receiver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1259,
                              "src": "9068:9:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1304,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1261,
                              "src": "9095:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1305,
                              "name": "NO_PAYMENT",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 883,
                              "src": "9120:10:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1306,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9199:1:3",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "argumentTypes": null,
                              "id": 1307,
                              "name": "_reference",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1269,
                              "src": "9261:10:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_calldata_ptr",
                                "typeString": "string calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_string_calldata_ptr",
                                "typeString": "string calldata"
                              }
                            ],
                            "id": 1301,
                            "name": "_makePaymentTransaction",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2326,
                            "src": "9003:23:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint64_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256,uint64,string memory)"
                            }
                          },
                          "id": 1308,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9003:282:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1309,
                        "nodeType": "ExpressionStatement",
                        "src": "9003:282:3"
                      },
                      {
                        "expression": null,
                        "functionReturnParameters": 1285,
                        "id": 1310,
                        "nodeType": "Return",
                        "src": "9299:7:3"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 1325,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1319,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1314,
                                "name": "settings",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1024,
                                "src": "9435:8:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Settings_$1020_storage",
                                  "typeString": "struct Finance.Settings storage ref"
                                }
                              },
                              "id": 1315,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "budgets",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1015,
                              "src": "9435:16:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1317,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1316,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1257,
                              "src": "9452:6:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9435:24:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1318,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1261,
                            "src": "9463:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9435:35:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1324,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "9474:27:3",
                          "subExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1320,
                                "name": "settings",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1024,
                                "src": "9475:8:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Settings_$1020_storage",
                                  "typeString": "struct Finance.Settings storage ref"
                                }
                              },
                              "id": 1321,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "hasBudget",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1019,
                              "src": "9475:18:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 1323,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1322,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1257,
                              "src": "9494:6:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9475:26:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "9435:66:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1326,
                        "name": "ERROR_BUDGET",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 934,
                        "src": "9503:12:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1313,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "9427:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1327,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9427:89:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1328,
                  "nodeType": "ExpressionStatement",
                  "src": "9427:89:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1332,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1329,
                      "name": "paymentId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1284,
                      "src": "9527:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1331,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "9539:19:3",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 1330,
                        "name": "paymentsNextIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1030,
                        "src": "9539:17:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9527:31:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1333,
                  "nodeType": "ExpressionStatement",
                  "src": "9527:31:3"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1335,
                        "name": "paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1284,
                        "src": "9584:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1336,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1259,
                        "src": "9595:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1337,
                        "name": "_maxRepeats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1267,
                        "src": "9606:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1338,
                        "name": "_reference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1269,
                        "src": "9619:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      ],
                      "id": 1334,
                      "name": "NewPayment",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1068,
                      "src": "9573:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_uint64_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (uint256,address,uint64,string memory)"
                      }
                    },
                    "id": 1339,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9573:57:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1340,
                  "nodeType": "EmitStatement",
                  "src": "9568:62:3"
                },
                {
                  "assignments": [
                    1342
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1342,
                      "name": "payment",
                      "nodeType": "VariableDeclaration",
                      "scope": 1403,
                      "src": "9641:23:3",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                        "typeString": "struct Finance.Payment"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1341,
                        "name": "Payment",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 974,
                        "src": "9641:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1346,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1343,
                      "name": "payments",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1028,
                      "src": "9667:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Payment_$974_storage_$",
                        "typeString": "mapping(uint256 => struct Finance.Payment storage ref)"
                      }
                    },
                    "id": 1345,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1344,
                      "name": "paymentId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1284,
                      "src": "9676:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "9667:19:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Payment_$974_storage",
                      "typeString": "struct Finance.Payment storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9641:45:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1351,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1347,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1342,
                        "src": "9696:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment storage pointer"
                        }
                      },
                      "id": 1349,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "token",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 957,
                      "src": "9696:13:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1350,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1257,
                      "src": "9712:6:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "9696:22:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1352,
                  "nodeType": "ExpressionStatement",
                  "src": "9696:22:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1357,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1353,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1342,
                        "src": "9728:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment storage pointer"
                        }
                      },
                      "id": 1355,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "receiver",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 959,
                      "src": "9728:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1356,
                      "name": "_receiver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1259,
                      "src": "9747:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "9728:28:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1358,
                  "nodeType": "ExpressionStatement",
                  "src": "9728:28:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1363,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1359,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1342,
                        "src": "9766:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment storage pointer"
                        }
                      },
                      "id": 1361,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 965,
                      "src": "9766:14:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1362,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1261,
                      "src": "9783:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9766:24:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1364,
                  "nodeType": "ExpressionStatement",
                  "src": "9766:24:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1369,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1365,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1342,
                        "src": "9800:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment storage pointer"
                        }
                      },
                      "id": 1367,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "initialPaymentTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 967,
                      "src": "9800:26:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1368,
                      "name": "_initialPaymentTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1263,
                      "src": "9829:19:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "9800:48:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1370,
                  "nodeType": "ExpressionStatement",
                  "src": "9800:48:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1375,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1371,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1342,
                        "src": "9858:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment storage pointer"
                        }
                      },
                      "id": 1373,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "interval",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 969,
                      "src": "9858:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1374,
                      "name": "_interval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1265,
                      "src": "9877:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "9858:28:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1376,
                  "nodeType": "ExpressionStatement",
                  "src": "9858:28:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1381,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1377,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1342,
                        "src": "9896:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment storage pointer"
                        }
                      },
                      "id": 1379,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "maxRepeats",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 971,
                      "src": "9896:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1380,
                      "name": "_maxRepeats",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1267,
                      "src": "9917:11:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "9896:32:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1382,
                  "nodeType": "ExpressionStatement",
                  "src": "9896:32:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1388,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1383,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1342,
                        "src": "9938:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment storage pointer"
                        }
                      },
                      "id": 1385,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "createdBy",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 961,
                      "src": "9938:17:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1386,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12670,
                        "src": "9958:3:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 1387,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "9958:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "9938:30:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1389,
                  "nodeType": "ExpressionStatement",
                  "src": "9938:30:3"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 1395,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1391,
                          "name": "paymentId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1284,
                          "src": "9999:9:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1390,
                        "name": "nextPaymentTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2004,
                        "src": "9983:15:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint64_$",
                          "typeString": "function (uint256) view returns (uint64)"
                        }
                      },
                      "id": 1392,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9983:26:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 1393,
                        "name": "getTimestamp64",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8868,
                        "src": "10013:14:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                          "typeString": "function () view returns (uint64)"
                        }
                      },
                      "id": 1394,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10013:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "9983:46:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1401,
                  "nodeType": "IfStatement",
                  "src": "9979:103:3",
                  "trueBody": {
                    "id": 1400,
                    "nodeType": "Block",
                    "src": "10031:51:3",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1397,
                              "name": "paymentId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1284,
                              "src": "10061:9:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1396,
                            "name": "_executePayment",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2283,
                            "src": "10045:15:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 1398,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10045:26:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1399,
                        "nodeType": "ExpressionStatement",
                        "src": "10045:26:3"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@notice Create a new payment of `@tokenAmount(_token, _amount)` to `_receiver``_maxRepeats > 0 ? ', executing ' + _maxRepeats + ' times at intervals of ' + @transformTime(_interval) : ''`\n@param _token Address of token for payment\n@param _receiver Address that will receive payment\n@param _amount Tokens that are payed every time the payment is due\n@param _initialPaymentTime Timestamp for when the first payment is done\n@param _interval Number of seconds that need to pass between payment transactions\n@param _maxRepeats Maximum instances a payment can be executed\n@param _reference String detailing payment reason",
            "id": 1403,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1272,
                    "name": "CREATE_PAYMENTS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 860,
                    "src": "8640:20:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1274,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1257,
                        "src": "8666:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1275,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1259,
                        "src": "8674:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1276,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1261,
                        "src": "8685:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1277,
                        "name": "_interval",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1265,
                        "src": "8694:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1278,
                        "name": "_maxRepeats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1267,
                        "src": "8705:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 1273,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7175,
                        7190,
                        7210,
                        7225,
                        7245,
                        7266,
                        7290,
                        7310,
                        7339,
                        7364,
                        7389,
                        7412,
                        7443,
                        7482,
                        7529,
                        7584
                      ],
                      "referencedDeclaration": 7339,
                      "src": "8662:3:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (address,address,uint256,uint256,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 1279,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8662:55:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 1280,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1271,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8406,
                  "src": "8634:5:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8634:84:3"
              },
              {
                "arguments": null,
                "id": 1282,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1281,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1110,
                  "src": "8727:17:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8727:17:3"
              }
            ],
            "name": "newPayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1270,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1257,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 1403,
                  "src": "8419:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1256,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8419:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1259,
                  "name": "_receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 1403,
                  "src": "8443:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1258,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8443:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1261,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1403,
                  "src": "8470:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1260,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8470:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1263,
                  "name": "_initialPaymentTime",
                  "nodeType": "VariableDeclaration",
                  "scope": 1403,
                  "src": "8495:26:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1262,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "8495:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1265,
                  "name": "_interval",
                  "nodeType": "VariableDeclaration",
                  "scope": 1403,
                  "src": "8531:16:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1264,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "8531:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1267,
                  "name": "_maxRepeats",
                  "nodeType": "VariableDeclaration",
                  "scope": 1403,
                  "src": "8557:18:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1266,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "8557:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1269,
                  "name": "_reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 1403,
                  "src": "8585:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1268,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "8585:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8409:199:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1285,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1284,
                  "name": "paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1403,
                  "src": "8762:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1283,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8762:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8761:19:3"
            },
            "scope": 2645,
            "src": "8390:1698:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1439,
              "nodeType": "Block",
              "src": "10490:182:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 1425,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1423,
                          "name": "_periodDuration",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1405,
                          "src": "10508:15:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 1424,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10527:6:3",
                          "subdenomination": "days",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_86400_by_1",
                            "typeString": "int_const 86400"
                          },
                          "value": "1"
                        },
                        "src": "10508:25:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1426,
                        "name": "ERROR_SET_PERIOD_TOO_SHORT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 922,
                        "src": "10535:26:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1422,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "10500:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1427,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10500:62:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1428,
                  "nodeType": "ExpressionStatement",
                  "src": "10500:62:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1433,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1429,
                        "name": "settings",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1024,
                        "src": "10572:8:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Settings_$1020_storage",
                          "typeString": "struct Finance.Settings storage ref"
                        }
                      },
                      "id": 1431,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "periodDuration",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "10572:23:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1432,
                      "name": "_periodDuration",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1405,
                      "src": "10598:15:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "10572:41:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1434,
                  "nodeType": "ExpressionStatement",
                  "src": "10572:41:3"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1436,
                        "name": "_periodDuration",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1405,
                        "src": "10649:15:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 1435,
                      "name": "ChangePeriodDuration",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1090,
                      "src": "10628:20:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint64_$returns$__$",
                        "typeString": "function (uint64)"
                      }
                    },
                    "id": 1437,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10628:37:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1438,
                  "nodeType": "EmitStatement",
                  "src": "10623:42:3"
                }
              ]
            },
            "documentation": "@notice Change period duration to `@transformTime(_periodDuration)`, effective for next accounting period\n@param _periodDuration Duration in seconds for accounting periods",
            "id": 1440,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1408,
                    "name": "CHANGE_PERIOD_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 865,
                    "src": "10375:18:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1411,
                            "name": "_periodDuration",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1405,
                            "src": "10407:15:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          ],
                          "id": 1410,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "10399:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 1412,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10399:24:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1414,
                              "name": "settings",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1024,
                              "src": "10433:8:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Settings_$1020_storage",
                                "typeString": "struct Finance.Settings storage ref"
                              }
                            },
                            "id": 1415,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "periodDuration",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1011,
                            "src": "10433:23:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          ],
                          "id": 1413,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "10425:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 1416,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10425:32:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1409,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7175,
                        7190,
                        7210,
                        7225,
                        7245,
                        7266,
                        7290,
                        7310,
                        7339,
                        7364,
                        7389,
                        7412,
                        7443,
                        7482,
                        7529,
                        7584
                      ],
                      "referencedDeclaration": 7443,
                      "src": "10395:3:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 1417,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10395:63:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 1418,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1407,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8406,
                  "src": "10369:5:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10369:90:3"
              },
              {
                "arguments": null,
                "id": 1420,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1419,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1110,
                  "src": "10468:17:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10468:17:3"
              }
            ],
            "name": "setPeriodDuration",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1406,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1405,
                  "name": "_periodDuration",
                  "nodeType": "VariableDeclaration",
                  "scope": 1440,
                  "src": "10320:22:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1404,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "10320:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10319:24:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1421,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10490:0:3"
            },
            "scope": 2645,
            "src": "10293:379:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1496,
              "nodeType": "Block",
              "src": "11130:198:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1473,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1467,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1024,
                          "src": "11140:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$1020_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 1470,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "budgets",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1015,
                        "src": "11140:16:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1471,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 1469,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1442,
                        "src": "11157:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "11140:24:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1472,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1444,
                      "src": "11167:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11140:34:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1474,
                  "nodeType": "ExpressionStatement",
                  "src": "11140:34:3"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 1479,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "11188:27:3",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1475,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1024,
                          "src": "11189:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$1020_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 1476,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hasBudget",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1019,
                        "src": "11189:18:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 1478,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 1477,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1442,
                        "src": "11208:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "11189:26:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1489,
                  "nodeType": "IfStatement",
                  "src": "11184:91:3",
                  "trueBody": {
                    "id": 1488,
                    "nodeType": "Block",
                    "src": "11217:58:3",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1486,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1480,
                                "name": "settings",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1024,
                                "src": "11231:8:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Settings_$1020_storage",
                                  "typeString": "struct Finance.Settings storage ref"
                                }
                              },
                              "id": 1483,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "hasBudget",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1019,
                              "src": "11231:18:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 1484,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1482,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1442,
                              "src": "11250:6:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "11231:26:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "74727565",
                            "id": 1485,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11260:4:3",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "11231:33:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1487,
                        "nodeType": "ExpressionStatement",
                        "src": "11231:33:3"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1491,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1442,
                        "src": "11299:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1492,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1444,
                        "src": "11307:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "74727565",
                        "id": 1493,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11316:4:3",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1490,
                      "name": "SetBudget",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1058,
                      "src": "11289:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (address,uint256,bool)"
                      }
                    },
                    "id": 1494,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11289:32:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1495,
                  "nodeType": "EmitStatement",
                  "src": "11284:37:3"
                }
              ]
            },
            "documentation": "@notice Set budget for `_token.symbol(): string` to `@tokenAmount(_token, _amount, false)`, effective immediately\n@param _token Address for token\n@param _amount New budget amount",
            "id": 1497,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1447,
                    "name": "CHANGE_BUDGETS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 870,
                    "src": "10995:19:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1449,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1442,
                        "src": "11020:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1450,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1444,
                        "src": "11028:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1451,
                            "name": "settings",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1024,
                            "src": "11037:8:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Settings_$1020_storage",
                              "typeString": "struct Finance.Settings storage ref"
                            }
                          },
                          "id": 1452,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "budgets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1015,
                          "src": "11037:16:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                          }
                        },
                        "id": 1454,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1453,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1442,
                          "src": "11054:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "11037:24:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "condition": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1455,
                              "name": "settings",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1024,
                              "src": "11063:8:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Settings_$1020_storage",
                                "typeString": "struct Finance.Settings storage ref"
                              }
                            },
                            "id": 1456,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "hasBudget",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1019,
                            "src": "11063:18:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 1458,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1457,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1442,
                            "src": "11082:6:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "11063:26:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1460,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11096:1:3",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "id": 1461,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "Conditional",
                        "src": "11063:34:3",
                        "trueExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 1459,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11092:1:3",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      ],
                      "id": 1448,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7175,
                        7190,
                        7210,
                        7225,
                        7245,
                        7266,
                        7290,
                        7310,
                        7339,
                        7364,
                        7389,
                        7412,
                        7443,
                        7482,
                        7529,
                        7584
                      ],
                      "referencedDeclaration": 7290,
                      "src": "11016:3:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (address,uint256,uint256,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 1462,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11016:82:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 1463,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1446,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8406,
                  "src": "10989:5:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10989:110:3"
              },
              {
                "arguments": null,
                "id": 1465,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1464,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1110,
                  "src": "11108:17:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11108:17:3"
              }
            ],
            "name": "setBudget",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1445,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1442,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 1497,
                  "src": "10918:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1441,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10918:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1444,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1497,
                  "src": "10942:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1443,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10942:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10908:55:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1466,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11130:0:3"
            },
            "scope": 2645,
            "src": "10890:438:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1546,
              "nodeType": "Block",
              "src": "11683:131:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1530,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1524,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1024,
                          "src": "11693:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$1020_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 1527,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "budgets",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1015,
                        "src": "11693:16:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1528,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 1526,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1499,
                        "src": "11710:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "11693:24:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1529,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11720:1:3",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "11693:28:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1531,
                  "nodeType": "ExpressionStatement",
                  "src": "11693:28:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1538,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1532,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1024,
                          "src": "11731:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$1020_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 1535,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hasBudget",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1019,
                        "src": "11731:18:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 1536,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 1534,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1499,
                        "src": "11750:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "11731:26:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 1537,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11760:5:3",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "11731:34:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1539,
                  "nodeType": "ExpressionStatement",
                  "src": "11731:34:3"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1541,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1499,
                        "src": "11790:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 1542,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11798:1:3",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 1543,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11801:5:3",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1540,
                      "name": "SetBudget",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1058,
                      "src": "11780:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (address,uint256,bool)"
                      }
                    },
                    "id": 1544,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11780:27:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1545,
                  "nodeType": "EmitStatement",
                  "src": "11775:32:3"
                }
              ]
            },
            "documentation": "@notice Remove spending limit for `_token.symbol(): string`, effective immediately\n@param _token Address for token",
            "id": 1547,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1502,
                    "name": "CHANGE_BUDGETS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 870,
                    "src": "11545:19:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1504,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1499,
                        "src": "11570:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1506,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11586:1:3",
                            "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": 1505,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "11578:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 1507,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11578:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1508,
                            "name": "settings",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1024,
                            "src": "11590:8:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Settings_$1020_storage",
                              "typeString": "struct Finance.Settings storage ref"
                            }
                          },
                          "id": 1509,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "budgets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1015,
                          "src": "11590:16:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                          }
                        },
                        "id": 1511,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1510,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1499,
                          "src": "11607:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "11590:24:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "condition": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1512,
                              "name": "settings",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1024,
                              "src": "11616:8:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Settings_$1020_storage",
                                "typeString": "struct Finance.Settings storage ref"
                              }
                            },
                            "id": 1513,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "hasBudget",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1019,
                            "src": "11616:18:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 1515,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1514,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1499,
                            "src": "11635:6:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "11616:26:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1517,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11649:1:3",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "id": 1518,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "Conditional",
                        "src": "11616:34:3",
                        "trueExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 1516,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11645:1:3",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      ],
                      "id": 1503,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7175,
                        7190,
                        7210,
                        7225,
                        7245,
                        7266,
                        7290,
                        7310,
                        7339,
                        7364,
                        7389,
                        7412,
                        7443,
                        7482,
                        7529,
                        7584
                      ],
                      "referencedDeclaration": 7290,
                      "src": "11566:3:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (address,uint256,uint256,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 1519,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11566:85:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 1520,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1501,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8406,
                  "src": "11539:5:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11539:113:3"
              },
              {
                "arguments": null,
                "id": 1522,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1521,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1110,
                  "src": "11661:17:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11661:17:3"
              }
            ],
            "name": "removeBudget",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1500,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1499,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 1547,
                  "src": "11498:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1498,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11498:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11497:16:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1523,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11683:0:3"
            },
            "scope": 2645,
            "src": "11476:338:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1581,
              "nodeType": "Block",
              "src": "12190:139:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 1573,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1569,
                              "name": "_paymentId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1549,
                              "src": "12224:10:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1568,
                            "name": "nextPaymentTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2004,
                            "src": "12208:15:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint64_$",
                              "typeString": "function (uint256) view returns (uint64)"
                            }
                          },
                          "id": 1570,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12208:27:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1571,
                            "name": "getTimestamp64",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8868,
                            "src": "12239:14:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                              "typeString": "function () view returns (uint64)"
                            }
                          },
                          "id": 1572,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12239:16:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "12208:47:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1574,
                        "name": "ERROR_EXECUTE_PAYMENT_TIME",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 937,
                        "src": "12257:26:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1567,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "12200:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1575,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12200:84:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1576,
                  "nodeType": "ExpressionStatement",
                  "src": "12200:84:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1578,
                        "name": "_paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1549,
                        "src": "12311:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1577,
                      "name": "_executePayment",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2283,
                      "src": "12295:15:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 1579,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12295:27:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1580,
                  "nodeType": "ExpressionStatement",
                  "src": "12295:27:3"
                }
              ]
            },
            "documentation": "@dev Executes any payment (requires role)\n@notice Execute pending payment #`_paymentId`\n@param _paymentId Identifier for payment",
            "id": 1582,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1552,
                    "name": "EXECUTE_PAYMENTS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 875,
                    "src": "12057:21:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1554,
                        "name": "_paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1549,
                        "src": "12084:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1555,
                            "name": "payments",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1028,
                            "src": "12096:8:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Payment_$974_storage_$",
                              "typeString": "mapping(uint256 => struct Finance.Payment storage ref)"
                            }
                          },
                          "id": 1557,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1556,
                            "name": "_paymentId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1549,
                            "src": "12105:10:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "12096:20:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Payment_$974_storage",
                            "typeString": "struct Finance.Payment storage ref"
                          }
                        },
                        "id": 1558,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "amount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 965,
                        "src": "12096:27:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1553,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7175,
                        7190,
                        7210,
                        7225,
                        7245,
                        7266,
                        7290,
                        7310,
                        7339,
                        7364,
                        7389,
                        7412,
                        7443,
                        7482,
                        7529,
                        7584
                      ],
                      "referencedDeclaration": 7443,
                      "src": "12080:3:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 1559,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12080:44:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 1560,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1551,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8406,
                  "src": "12051:5:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12051:74:3"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1562,
                    "name": "_paymentId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1549,
                    "src": "12148:10:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 1563,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1561,
                  "name": "paymentExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1127,
                  "src": "12134:13:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12134:25:3"
              },
              {
                "arguments": null,
                "id": 1565,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1564,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1110,
                  "src": "12168:17:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12168:17:3"
              }
            ],
            "name": "executePayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1550,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1549,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1582,
                  "src": "12006:18:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1548,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12006:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12005:20:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1566,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12190:0:3"
            },
            "scope": 2645,
            "src": "11982:347:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1619,
              "nodeType": "Block",
              "src": "12636:234:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 1600,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1596,
                              "name": "_paymentId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1584,
                              "src": "12670:10:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1595,
                            "name": "nextPaymentTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2004,
                            "src": "12654:15:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint64_$",
                              "typeString": "function (uint256) view returns (uint64)"
                            }
                          },
                          "id": 1597,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12654:27:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1598,
                            "name": "getTimestamp64",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8868,
                            "src": "12685:14:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                              "typeString": "function () view returns (uint64)"
                            }
                          },
                          "id": 1599,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12685:16:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "12654:47:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1601,
                        "name": "ERROR_RECEIVER_EXECUTE_PAYMENT_TIME",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 940,
                        "src": "12703:35:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1594,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "12646:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1602,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12646:93:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1603,
                  "nodeType": "ExpressionStatement",
                  "src": "12646:93:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1611,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1605,
                              "name": "payments",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1028,
                              "src": "12757:8:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Payment_$974_storage_$",
                                "typeString": "mapping(uint256 => struct Finance.Payment storage ref)"
                              }
                            },
                            "id": 1607,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1606,
                              "name": "_paymentId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1584,
                              "src": "12766:10:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "12757:20:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Payment_$974_storage",
                              "typeString": "struct Finance.Payment storage ref"
                            }
                          },
                          "id": 1608,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "receiver",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 959,
                          "src": "12757:29:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1609,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12670,
                            "src": "12790:3:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1610,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "12790:10:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "12757:43:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1612,
                        "name": "ERROR_PAYMENT_RECEIVER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 943,
                        "src": "12802:22:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1604,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "12749:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1613,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12749:76:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1614,
                  "nodeType": "ExpressionStatement",
                  "src": "12749:76:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1616,
                        "name": "_paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1584,
                        "src": "12852:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1615,
                      "name": "_executePayment",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2283,
                      "src": "12836:15:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 1617,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12836:27:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1618,
                  "nodeType": "ExpressionStatement",
                  "src": "12836:27:3"
                }
              ]
            },
            "documentation": "@dev Always allows receiver of a payment to trigger execution\n@notice Execute pending payment #`_paymentId`\n@param _paymentId Identifier for payment",
            "id": 1620,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 1587,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1586,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8703,
                  "src": "12578:13:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12578:13:3"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1589,
                    "name": "_paymentId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1584,
                    "src": "12606:10:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 1590,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1588,
                  "name": "paymentExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1127,
                  "src": "12592:13:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12592:25:3"
              },
              {
                "arguments": null,
                "id": 1592,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1591,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1110,
                  "src": "12618:17:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12618:17:3"
              }
            ],
            "name": "receiverExecutePayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1585,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1584,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1620,
                  "src": "12549:18:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1583,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12549:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12548:20:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1593,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12636:0:3"
            },
            "scope": 2645,
            "src": "12517:353:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1655,
              "nodeType": "Block",
              "src": "13558:111:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1648,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1642,
                          "name": "payments",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1028,
                          "src": "13568:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Payment_$974_storage_$",
                            "typeString": "mapping(uint256 => struct Finance.Payment storage ref)"
                          }
                        },
                        "id": 1644,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1643,
                          "name": "_paymentId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1622,
                          "src": "13577:10:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "13568:20:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage",
                          "typeString": "struct Finance.Payment storage ref"
                        }
                      },
                      "id": 1645,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "inactive",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 963,
                      "src": "13568:29:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1647,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "13600:8:3",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 1646,
                        "name": "_active",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1624,
                        "src": "13601:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "13568:40:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1649,
                  "nodeType": "ExpressionStatement",
                  "src": "13568:40:3"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1651,
                        "name": "_paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1622,
                        "src": "13642:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1652,
                        "name": "_active",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1624,
                        "src": "13654:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1650,
                      "name": "ChangePaymentState",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1086,
                      "src": "13623:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (uint256,bool)"
                      }
                    },
                    "id": 1653,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13623:39:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1654,
                  "nodeType": "EmitStatement",
                  "src": "13618:44:3"
                }
              ]
            },
            "documentation": "@notice `_active ? 'Activate' : 'Disable'` payment #`_paymentId`\n@dev Note that we do not require this action to transition periods, as it doesn't directly\n     impact any accounting periods.\n     Not having to transition periods also makes disabling payments easier to prevent funds\n     from being pulled out in the event of a breach.\n@param _paymentId Identifier for payment\n@param _active Whether it will be active or inactive",
            "id": 1656,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1627,
                    "name": "MANAGE_PAYMENTS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 880,
                    "src": "13455:20:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1629,
                        "name": "_paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1622,
                        "src": "13481:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "condition": {
                              "argumentTypes": null,
                              "id": 1631,
                              "name": "_active",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1624,
                              "src": "13501:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1633,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13515:1:3",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "id": 1634,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "Conditional",
                            "src": "13501:15:3",
                            "trueExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 1632,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13511:1:3",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "id": 1630,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "13493:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 1635,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13493:24:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1628,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7175,
                        7190,
                        7210,
                        7225,
                        7245,
                        7266,
                        7290,
                        7310,
                        7339,
                        7364,
                        7389,
                        7412,
                        7443,
                        7482,
                        7529,
                        7584
                      ],
                      "referencedDeclaration": 7443,
                      "src": "13477:3:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 1636,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13477:41:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 1637,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1626,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8406,
                  "src": "13449:5:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13449:70:3"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1639,
                    "name": "_paymentId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1622,
                    "src": "13542:10:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 1640,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1638,
                  "name": "paymentExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1127,
                  "src": "13528:13:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13528:25:3"
              }
            ],
            "name": "setPaymentStatus",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1625,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1622,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1656,
                  "src": "13390:18:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1621,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13390:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1624,
                  "name": "_active",
                  "nodeType": "VariableDeclaration",
                  "scope": 1656,
                  "src": "13410:12:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1623,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "13410:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13389:34:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1641,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13558:0:3"
            },
            "scope": 2645,
            "src": "13364:305:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1697,
              "nodeType": "Block",
              "src": "14161:297:3",
              "statements": [
                {
                  "assignments": [
                    1666
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1666,
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 1698,
                      "src": "14171:14:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1665,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14171:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1681,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 1669,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1667,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1658,
                        "src": "14188:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 1668,
                        "name": "ETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8620,
                        "src": "14198:3:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "14188:13:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1678,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12791,
                          "src": "14252:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Finance_$2645",
                            "typeString": "contract Finance"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_Finance_$2645",
                            "typeString": "contract Finance"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1675,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1658,
                              "src": "14234:6:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1674,
                            "name": "ERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11941,
                            "src": "14228:5:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_ERC20_$11941_$",
                              "typeString": "type(contract ERC20)"
                            }
                          },
                          "id": 1676,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14228:13:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$11941",
                            "typeString": "contract ERC20"
                          }
                        },
                        "id": 1677,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "balanceOf",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 11886,
                        "src": "14228:23:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                          "typeString": "function (address) view external returns (uint256)"
                        }
                      },
                      "id": 1679,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14228:29:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1680,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "14188:69:3",
                    "trueExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1671,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12791,
                            "src": "14212:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Finance_$2645",
                              "typeString": "contract Finance"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Finance_$2645",
                              "typeString": "contract Finance"
                            }
                          ],
                          "id": 1670,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14204:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 1672,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14204:13:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 1673,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "14204:21:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14171:86:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1685,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1683,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1666,
                          "src": "14275:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1684,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14284:1:3",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "14275:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1686,
                        "name": "ERROR_RECOVER_AMOUNT_ZERO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 928,
                        "src": "14287:25:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1682,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "14267:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1687,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14267:46:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1688,
                  "nodeType": "ExpressionStatement",
                  "src": "14267:46:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1690,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1658,
                        "src": "14346:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1691,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1666,
                        "src": "14366:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5265636f76657220746f205661756c74",
                        "id": 1692,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14386:18:3",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_44b346127d1482933635aa4b55865bc72d4d3e4d60d301bd26394661695fe15d",
                          "typeString": "literal_string \"Recover to Vault\""
                        },
                        "value": "Recover to Vault"
                      },
                      {
                        "argumentTypes": null,
                        "id": 1693,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12791,
                        "src": "14418:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Finance_$2645",
                          "typeString": "contract Finance"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 1694,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14436:5:3",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_44b346127d1482933635aa4b55865bc72d4d3e4d60d301bd26394661695fe15d",
                          "typeString": "literal_string \"Recover to Vault\""
                        },
                        {
                          "typeIdentifier": "t_contract$_Finance_$2645",
                          "typeString": "contract Finance"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1689,
                      "name": "_deposit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2152,
                      "src": "14324:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_string_memory_ptr_$_t_address_$_t_bool_$returns$__$",
                        "typeString": "function (address,uint256,string memory,address,bool)"
                      }
                    },
                    "id": 1695,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14324:127:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1696,
                  "nodeType": "ExpressionStatement",
                  "src": "14324:127:3"
                }
              ]
            },
            "documentation": "@dev Allows making a simple payment from this contract to the Vault, to avoid locked tokens.\n     This contract should never receive tokens with a simple transfer call, but in case it\n     happens, this function allows for their recovery.\n@notice Send tokens held in this contract to the Vault\n@param _token Token whose balance is going to be transferred.",
            "id": 1698,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 1661,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1660,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8703,
                  "src": "14129:13:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14129:13:3"
              },
              {
                "arguments": null,
                "id": 1663,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1662,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1110,
                  "src": "14143:17:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14143:17:3"
              }
            ],
            "name": "recoverToVault",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1659,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1658,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 1698,
                  "src": "14106:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1657,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14106:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14105:16:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1664,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14161:0:3"
            },
            "scope": 2645,
            "src": "14082:376:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1711,
              "nodeType": "Block",
              "src": "15119:71:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1708,
                        "name": "_maxTransitions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1700,
                        "src": "15167:15:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 1707,
                      "name": "_tryTransitionAccountingPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2557,
                      "src": "15136:30:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (uint256) returns (bool)"
                      }
                    },
                    "id": 1709,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15136:47:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1706,
                  "id": 1710,
                  "nodeType": "Return",
                  "src": "15129:54:3"
                }
              ]
            },
            "documentation": "@dev Transitions accounting periods if needed. For preventing OOG attacks, a maxTransitions\n     param is provided. If more than the specified number of periods need to be transitioned,\n     it will return false.\n@notice Transition accounting period if needed\n@param _maxTransitions Maximum periods that can be transitioned\n@return success Boolean indicating whether the accounting period is the correct one (if false,\n                maxTransitions was surpased and another call is needed)",
            "id": 1712,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 1703,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1702,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8703,
                  "src": "15082:13:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15082:13:3"
              }
            ],
            "name": "tryTransitionAccountingPeriod",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1701,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1700,
                  "name": "_maxTransitions",
                  "nodeType": "VariableDeclaration",
                  "scope": 1712,
                  "src": "15051:22:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1699,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "15051:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15050:24:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1706,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1705,
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 1712,
                  "src": "15105:12:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1704,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "15105:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15104:14:3"
            },
            "scope": 2645,
            "src": "15012:178:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1723,
              "nodeType": "Block",
              "src": "15553:41:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1721,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "15570:17:3",
                    "subExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 1719,
                        "name": "hasInitialized",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8733,
                        "src": "15571:14:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                          "typeString": "function () view returns (bool)"
                        }
                      },
                      "id": 1720,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15571:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1718,
                  "id": 1722,
                  "nodeType": "Return",
                  "src": "15563:24:3"
                }
              ]
            },
            "documentation": "@dev Disable recovery escape hatch if the app has been initialized, as it could be used\n     maliciously to transfer funds in the Finance app to another Vault\n     finance#recoverToVault() should be used to recover funds to the Finance's vault",
            "id": 1724,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "allowRecoverability",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1715,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1714,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1724,
                  "src": "15517:7:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1713,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15517:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15516:9:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1718,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1717,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1724,
                  "src": "15547:4:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1716,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "15547:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15546:6:3"
            },
            "scope": 2645,
            "src": "15488:106:3",
            "stateMutability": "view",
            "superFunction": 9060,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1801,
              "nodeType": "Block",
              "src": "16003:411:3",
              "statements": [
                {
                  "assignments": [
                    1751
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1751,
                      "name": "payment",
                      "nodeType": "VariableDeclaration",
                      "scope": 1802,
                      "src": "16013:23:3",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                        "typeString": "struct Finance.Payment"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1750,
                        "name": "Payment",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 974,
                        "src": "16013:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1755,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1752,
                      "name": "payments",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1028,
                      "src": "16039:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Payment_$974_storage_$",
                        "typeString": "mapping(uint256 => struct Finance.Payment storage ref)"
                      }
                    },
                    "id": 1754,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1753,
                      "name": "_paymentId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1726,
                      "src": "16048:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "16039:20:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Payment_$974_storage",
                      "typeString": "struct Finance.Payment storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16013:46:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1759,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1756,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1732,
                      "src": "16070:5:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1757,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1751,
                        "src": "16078:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment storage pointer"
                        }
                      },
                      "id": 1758,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "token",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 957,
                      "src": "16078:13:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "16070:21:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1760,
                  "nodeType": "ExpressionStatement",
                  "src": "16070:21:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1764,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1761,
                      "name": "receiver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1734,
                      "src": "16101:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1762,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1751,
                        "src": "16112:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment storage pointer"
                        }
                      },
                      "id": 1763,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "receiver",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 959,
                      "src": "16112:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "16101:27:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1765,
                  "nodeType": "ExpressionStatement",
                  "src": "16101:27:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1769,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1766,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1736,
                      "src": "16138:6:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1767,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1751,
                        "src": "16147:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment storage pointer"
                        }
                      },
                      "id": 1768,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 965,
                      "src": "16147:14:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "16138:23:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1770,
                  "nodeType": "ExpressionStatement",
                  "src": "16138:23:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1774,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1771,
                      "name": "initialPaymentTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1738,
                      "src": "16171:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1772,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1751,
                        "src": "16192:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment storage pointer"
                        }
                      },
                      "id": 1773,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialPaymentTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 967,
                      "src": "16192:26:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "16171:47:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1775,
                  "nodeType": "ExpressionStatement",
                  "src": "16171:47:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1779,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1776,
                      "name": "interval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1740,
                      "src": "16228:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1777,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1751,
                        "src": "16239:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment storage pointer"
                        }
                      },
                      "id": 1778,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "interval",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 969,
                      "src": "16239:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "16228:27:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1780,
                  "nodeType": "ExpressionStatement",
                  "src": "16228:27:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1784,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1781,
                      "name": "maxRepeats",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1742,
                      "src": "16265:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1782,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1751,
                        "src": "16278:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment storage pointer"
                        }
                      },
                      "id": 1783,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "maxRepeats",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 971,
                      "src": "16278:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "16265:31:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1785,
                  "nodeType": "ExpressionStatement",
                  "src": "16265:31:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1789,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1786,
                      "name": "repeats",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1746,
                      "src": "16306:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1787,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1751,
                        "src": "16316:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment storage pointer"
                        }
                      },
                      "id": 1788,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "repeats",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 973,
                      "src": "16316:15:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "16306:25:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1790,
                  "nodeType": "ExpressionStatement",
                  "src": "16306:25:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1794,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1791,
                      "name": "inactive",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1744,
                      "src": "16341:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1792,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1751,
                        "src": "16352:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment storage pointer"
                        }
                      },
                      "id": 1793,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "inactive",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 963,
                      "src": "16352:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "16341:27:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1795,
                  "nodeType": "ExpressionStatement",
                  "src": "16341:27:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1799,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1796,
                      "name": "createdBy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1748,
                      "src": "16378:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1797,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1751,
                        "src": "16390:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment storage pointer"
                        }
                      },
                      "id": 1798,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "createdBy",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 961,
                      "src": "16390:17:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "16378:29:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1800,
                  "nodeType": "ExpressionStatement",
                  "src": "16378:29:3"
                }
              ]
            },
            "documentation": null,
            "id": 1802,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1729,
                    "name": "_paymentId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1726,
                    "src": "15690:10:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 1730,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1728,
                  "name": "paymentExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1127,
                  "src": "15676:13:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15676:25:3"
              }
            ],
            "name": "getPayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1727,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1726,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1802,
                  "src": "15620:18:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1725,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15620:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15619:20:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1749,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1732,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 1802,
                  "src": "15732:13:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1731,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15732:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1734,
                  "name": "receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 1802,
                  "src": "15759:16:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1733,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15759:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1736,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1802,
                  "src": "15789:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1735,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15789:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1738,
                  "name": "initialPaymentTime",
                  "nodeType": "VariableDeclaration",
                  "scope": 1802,
                  "src": "15817:25:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1737,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "15817:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1740,
                  "name": "interval",
                  "nodeType": "VariableDeclaration",
                  "scope": 1802,
                  "src": "15856:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1739,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "15856:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1742,
                  "name": "maxRepeats",
                  "nodeType": "VariableDeclaration",
                  "scope": 1802,
                  "src": "15885:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1741,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "15885:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1744,
                  "name": "inactive",
                  "nodeType": "VariableDeclaration",
                  "scope": 1802,
                  "src": "15916:13:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1743,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "15916:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1746,
                  "name": "repeats",
                  "nodeType": "VariableDeclaration",
                  "scope": 1802,
                  "src": "15943:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1745,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "15943:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1748,
                  "name": "createdBy",
                  "nodeType": "VariableDeclaration",
                  "scope": 1802,
                  "src": "15971:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1747,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15971:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15718:280:3"
            },
            "scope": 2645,
            "src": "15600:814:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1872,
              "nodeType": "Block",
              "src": "16806:414:3",
              "statements": [
                {
                  "assignments": [
                    1827
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1827,
                      "name": "transaction",
                      "nodeType": "VariableDeclaration",
                      "scope": 1873,
                      "src": "16816:31:3",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                        "typeString": "struct Finance.Transaction"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1826,
                        "name": "Transaction",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 991,
                        "src": "16816:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1831,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1828,
                      "name": "transactions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1034,
                      "src": "16850:12:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Transaction_$991_storage_$",
                        "typeString": "mapping(uint256 => struct Finance.Transaction storage ref)"
                      }
                    },
                    "id": 1830,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1829,
                      "name": "_transactionId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1804,
                      "src": "16863:14:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "16850:28:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Transaction_$991_storage",
                      "typeString": "struct Finance.Transaction storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16816:62:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1835,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1832,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1818,
                      "src": "16889:5:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1833,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1827,
                        "src": "16897:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 1834,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "token",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 976,
                      "src": "16897:17:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "16889:25:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1836,
                  "nodeType": "ExpressionStatement",
                  "src": "16889:25:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1840,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1837,
                      "name": "entity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1820,
                      "src": "16924:6:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1838,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1827,
                        "src": "16933:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 1839,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "entity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 978,
                      "src": "16933:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "16924:27:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1841,
                  "nodeType": "ExpressionStatement",
                  "src": "16924:27:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1845,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1842,
                      "name": "isIncoming",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1822,
                      "src": "16961:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1843,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1827,
                        "src": "16974:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 1844,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "isIncoming",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 980,
                      "src": "16974:22:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "16961:35:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1846,
                  "nodeType": "ExpressionStatement",
                  "src": "16961:35:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1850,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1847,
                      "name": "date",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1824,
                      "src": "17006:4:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1848,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1827,
                        "src": "17013:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 1849,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "date",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 988,
                      "src": "17013:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "17006:23:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1851,
                  "nodeType": "ExpressionStatement",
                  "src": "17006:23:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1855,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1852,
                      "name": "periodId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1810,
                      "src": "17039:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1853,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1827,
                        "src": "17050:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 1854,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "periodId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 990,
                      "src": "17050:20:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "17039:31:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1856,
                  "nodeType": "ExpressionStatement",
                  "src": "17039:31:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1860,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1857,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1812,
                      "src": "17080:6:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1858,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1827,
                        "src": "17089:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 1859,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 982,
                      "src": "17089:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17080:27:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1861,
                  "nodeType": "ExpressionStatement",
                  "src": "17080:27:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1865,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1862,
                      "name": "paymentId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1814,
                      "src": "17117:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1863,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1827,
                        "src": "17129:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 1864,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "paymentId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 984,
                      "src": "17129:21:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17117:33:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1866,
                  "nodeType": "ExpressionStatement",
                  "src": "17117:33:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1870,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1867,
                      "name": "paymentRepeatNumber",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1816,
                      "src": "17160:19:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1868,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1827,
                        "src": "17182:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 1869,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "paymentRepeatNumber",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 986,
                      "src": "17182:31:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "17160:53:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1871,
                  "nodeType": "ExpressionStatement",
                  "src": "17160:53:3"
                }
              ]
            },
            "documentation": null,
            "id": 1873,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1807,
                    "name": "_transactionId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1804,
                    "src": "16522:14:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 1808,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1806,
                  "name": "transactionExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1144,
                  "src": "16504:17:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16504:33:3"
              }
            ],
            "name": "getTransaction",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1805,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1804,
                  "name": "_transactionId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1873,
                  "src": "16444:22:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1803,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16444:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16443:24:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1825,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1810,
                  "name": "periodId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1873,
                  "src": "16568:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1809,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "16568:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1812,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1873,
                  "src": "16597:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1811,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16597:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1814,
                  "name": "paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1873,
                  "src": "16625:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1813,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16625:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1816,
                  "name": "paymentRepeatNumber",
                  "nodeType": "VariableDeclaration",
                  "scope": 1873,
                  "src": "16656:26:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1815,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "16656:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1818,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 1873,
                  "src": "16696:13:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1817,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16696:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1820,
                  "name": "entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 1873,
                  "src": "16723:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1819,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16723:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1822,
                  "name": "isIncoming",
                  "nodeType": "VariableDeclaration",
                  "scope": 1873,
                  "src": "16751:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1821,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "16751:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1824,
                  "name": "date",
                  "nodeType": "VariableDeclaration",
                  "scope": 1873,
                  "src": "16780:11:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1823,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "16780:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16554:247:3"
            },
            "scope": 2645,
            "src": "16420:800:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1924,
              "nodeType": "Block",
              "src": "17519:296:3",
              "statements": [
                {
                  "assignments": [
                    1892
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1892,
                      "name": "period",
                      "nodeType": "VariableDeclaration",
                      "scope": 1925,
                      "src": "17529:21:3",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                        "typeString": "struct Finance.Period"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1891,
                        "name": "Period",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 1009,
                        "src": "17529:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                          "typeString": "struct Finance.Period"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1896,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1893,
                      "name": "periods",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1040,
                      "src": "17553:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$1009_storage_$",
                        "typeString": "mapping(uint64 => struct Finance.Period storage ref)"
                      }
                    },
                    "id": 1895,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1894,
                      "name": "_periodId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1875,
                      "src": "17561:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "17553:18:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Period_$1009_storage",
                      "typeString": "struct Finance.Period storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17529:42:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1902,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1897,
                      "name": "isCurrent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1881,
                      "src": "17582:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "id": 1901,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1898,
                          "name": "_currentPeriodId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2636,
                          "src": "17594:16:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                            "typeString": "function () view returns (uint64)"
                          }
                        },
                        "id": 1899,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17594:18:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 1900,
                        "name": "_periodId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1875,
                        "src": "17616:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "src": "17594:31:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "17582:43:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1903,
                  "nodeType": "ExpressionStatement",
                  "src": "17582:43:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1907,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1904,
                      "name": "startTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1883,
                      "src": "17636:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1905,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1892,
                        "src": "17648:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                          "typeString": "struct Finance.Period storage pointer"
                        }
                      },
                      "id": 1906,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "startTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 998,
                      "src": "17648:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "17636:28:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1908,
                  "nodeType": "ExpressionStatement",
                  "src": "17636:28:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1912,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1909,
                      "name": "endTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1885,
                      "src": "17674:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1910,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1892,
                        "src": "17684:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                          "typeString": "struct Finance.Period storage pointer"
                        }
                      },
                      "id": 1911,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "endTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1000,
                      "src": "17684:14:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "17674:24:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1913,
                  "nodeType": "ExpressionStatement",
                  "src": "17674:24:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1917,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1914,
                      "name": "firstTransactionId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1887,
                      "src": "17708:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1915,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1892,
                        "src": "17729:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                          "typeString": "struct Finance.Period storage pointer"
                        }
                      },
                      "id": 1916,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "firstTransactionId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1002,
                      "src": "17729:25:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17708:46:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1918,
                  "nodeType": "ExpressionStatement",
                  "src": "17708:46:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1922,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1919,
                      "name": "lastTransactionId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1889,
                      "src": "17764:17:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1920,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1892,
                        "src": "17784:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                          "typeString": "struct Finance.Period storage pointer"
                        }
                      },
                      "id": 1921,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "lastTransactionId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1004,
                      "src": "17784:24:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17764:44:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1923,
                  "nodeType": "ExpressionStatement",
                  "src": "17764:44:3"
                }
              ]
            },
            "documentation": null,
            "id": 1925,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1878,
                    "name": "_periodId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1875,
                    "src": "17312:9:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  }
                ],
                "id": 1879,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1877,
                  "name": "periodExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1157,
                  "src": "17299:12:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint64_$",
                    "typeString": "modifier (uint64)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17299:23:3"
              }
            ],
            "name": "getPeriod",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1876,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1875,
                  "name": "_periodId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1925,
                  "src": "17245:16:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1874,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "17245:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17244:18:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1890,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1881,
                  "name": "isCurrent",
                  "nodeType": "VariableDeclaration",
                  "scope": 1925,
                  "src": "17353:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1880,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "17353:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1883,
                  "name": "startTime",
                  "nodeType": "VariableDeclaration",
                  "scope": 1925,
                  "src": "17381:16:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1882,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "17381:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1885,
                  "name": "endTime",
                  "nodeType": "VariableDeclaration",
                  "scope": 1925,
                  "src": "17411:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1884,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "17411:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1887,
                  "name": "firstTransactionId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1925,
                  "src": "17439:26:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1886,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17439:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1889,
                  "name": "lastTransactionId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1925,
                  "src": "17479:25:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1888,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17479:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17339:175:3"
            },
            "scope": 2645,
            "src": "17226:589:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1958,
              "nodeType": "Block",
              "src": "18003:182:3",
              "statements": [
                {
                  "assignments": [
                    1940
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1940,
                      "name": "tokenStatement",
                      "nodeType": "VariableDeclaration",
                      "scope": 1959,
                      "src": "18013:37:3",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TokenStatement_$996_storage_ptr",
                        "typeString": "struct Finance.TokenStatement"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1939,
                        "name": "TokenStatement",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 996,
                        "src": "18013:14:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenStatement_$996_storage_ptr",
                          "typeString": "struct Finance.TokenStatement"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1947,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1941,
                          "name": "periods",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1040,
                          "src": "18053:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$1009_storage_$",
                            "typeString": "mapping(uint64 => struct Finance.Period storage ref)"
                          }
                        },
                        "id": 1943,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1942,
                          "name": "_periodId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1927,
                          "src": "18061:9:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "18053:18:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$1009_storage",
                          "typeString": "struct Finance.Period storage ref"
                        }
                      },
                      "id": 1944,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "tokenStatement",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1008,
                      "src": "18053:33:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TokenStatement_$996_storage_$",
                        "typeString": "mapping(address => struct Finance.TokenStatement storage ref)"
                      }
                    },
                    "id": 1946,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1945,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1929,
                      "src": "18087:6:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "18053:41:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TokenStatement_$996_storage",
                      "typeString": "struct Finance.TokenStatement storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18013:81:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1951,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1948,
                      "name": "expenses",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1935,
                      "src": "18104:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1949,
                        "name": "tokenStatement",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1940,
                        "src": "18115:14:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenStatement_$996_storage_ptr",
                          "typeString": "struct Finance.TokenStatement storage pointer"
                        }
                      },
                      "id": 1950,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "expenses",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 993,
                      "src": "18115:23:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18104:34:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1952,
                  "nodeType": "ExpressionStatement",
                  "src": "18104:34:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1956,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1953,
                      "name": "income",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1937,
                      "src": "18148:6:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1954,
                        "name": "tokenStatement",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1940,
                        "src": "18157:14:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenStatement_$996_storage_ptr",
                          "typeString": "struct Finance.TokenStatement storage pointer"
                        }
                      },
                      "id": 1955,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "income",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 995,
                      "src": "18157:21:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18148:30:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1957,
                  "nodeType": "ExpressionStatement",
                  "src": "18148:30:3"
                }
              ]
            },
            "documentation": null,
            "id": 1959,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1932,
                    "name": "_periodId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1927,
                    "src": "17937:9:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  }
                ],
                "id": 1933,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1931,
                  "name": "periodExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1157,
                  "src": "17924:12:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint64_$",
                    "typeString": "modifier (uint64)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17924:23:3"
              }
            ],
            "name": "getPeriodTokenStatement",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1930,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1927,
                  "name": "_periodId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1959,
                  "src": "17854:16:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1926,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "17854:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1929,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 1959,
                  "src": "17872:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1928,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17872:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17853:34:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1938,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1935,
                  "name": "expenses",
                  "nodeType": "VariableDeclaration",
                  "scope": 1959,
                  "src": "17965:16:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1934,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17965:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1937,
                  "name": "income",
                  "nodeType": "VariableDeclaration",
                  "scope": 1959,
                  "src": "17983:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1936,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17983:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17964:34:3"
            },
            "scope": 2645,
            "src": "17821:364:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2003,
              "nodeType": "Block",
              "src": "18291:460:3",
              "statements": [
                {
                  "assignments": [
                    1970
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1970,
                      "name": "payment",
                      "nodeType": "VariableDeclaration",
                      "scope": 2004,
                      "src": "18301:22:3",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Payment_$974_memory_ptr",
                        "typeString": "struct Finance.Payment"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1969,
                        "name": "Payment",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 974,
                        "src": "18301:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1974,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1971,
                      "name": "payments",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1028,
                      "src": "18326:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Payment_$974_storage_$",
                        "typeString": "mapping(uint256 => struct Finance.Payment storage ref)"
                      }
                    },
                    "id": 1973,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1972,
                      "name": "_paymentId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1961,
                      "src": "18335:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "18326:20:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Payment_$974_storage",
                      "typeString": "struct Finance.Payment storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18301:45:3"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 1979,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1975,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1970,
                        "src": "18361:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_memory_ptr",
                          "typeString": "struct Finance.Payment memory"
                        }
                      },
                      "id": 1976,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "repeats",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 973,
                      "src": "18361:15:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1977,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1970,
                        "src": "18380:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_memory_ptr",
                          "typeString": "struct Finance.Payment memory"
                        }
                      },
                      "id": 1978,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "maxRepeats",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 971,
                      "src": "18380:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "18361:37:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1983,
                  "nodeType": "IfStatement",
                  "src": "18357:159:3",
                  "trueBody": {
                    "id": 1982,
                    "nodeType": "Block",
                    "src": "18400:116:3",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1980,
                          "name": "MAX_UINT64",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 901,
                          "src": "18421:10:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "functionReturnParameters": 1968,
                        "id": 1981,
                        "nodeType": "Return",
                        "src": "18414:17:3"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1985
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1985,
                      "name": "increase",
                      "nodeType": "VariableDeclaration",
                      "scope": 2004,
                      "src": "18590:15:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 1984,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "18590:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1992,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1989,
                          "name": "payment",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1970,
                          "src": "18628:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Payment_$974_memory_ptr",
                            "typeString": "struct Finance.Payment memory"
                          }
                        },
                        "id": 1990,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "interval",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 969,
                        "src": "18628:16:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1986,
                          "name": "payment",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1970,
                          "src": "18608:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Payment_$974_memory_ptr",
                            "typeString": "struct Finance.Payment memory"
                          }
                        },
                        "id": 1987,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "repeats",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 973,
                        "src": "18608:15:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "id": 1988,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11756,
                      "src": "18608:19:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint64_$_t_uint64_$returns$_t_uint64_$bound_to$_t_uint64_$",
                        "typeString": "function (uint64,uint64) pure returns (uint64)"
                      }
                    },
                    "id": 1991,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18608:37:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18590:55:3"
                },
                {
                  "assignments": [
                    1994
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1994,
                      "name": "nextPayment",
                      "nodeType": "VariableDeclaration",
                      "scope": 2004,
                      "src": "18655:18:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 1993,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "18655:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2000,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1998,
                        "name": "increase",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1985,
                        "src": "18707:8:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1995,
                          "name": "payment",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1970,
                          "src": "18676:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Payment_$974_memory_ptr",
                            "typeString": "struct Finance.Payment memory"
                          }
                        },
                        "id": 1996,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "initialPaymentTime",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 967,
                        "src": "18676:26:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "id": 1997,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11831,
                      "src": "18676:30:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint64_$_t_uint64_$returns$_t_uint64_$bound_to$_t_uint64_$",
                        "typeString": "function (uint64,uint64) pure returns (uint64)"
                      }
                    },
                    "id": 1999,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18676:40:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18655:61:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2001,
                    "name": "nextPayment",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1994,
                    "src": "18733:11:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 1968,
                  "id": 2002,
                  "nodeType": "Return",
                  "src": "18726:18:3"
                }
              ]
            },
            "documentation": null,
            "id": 2004,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1964,
                    "name": "_paymentId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1961,
                    "src": "18262:10:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 1965,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1963,
                  "name": "paymentExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1127,
                  "src": "18248:13:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18248:25:3"
              }
            ],
            "name": "nextPaymentTime",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1962,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1961,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 2004,
                  "src": "18216:18:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1960,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18216:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18215:20:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1968,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1967,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2004,
                  "src": "18283:6:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1966,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "18283:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18282:8:3"
            },
            "scope": 2645,
            "src": "18191:560:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2012,
              "nodeType": "Block",
              "src": "18815:47:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 2009,
                      "name": "settings",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1024,
                      "src": "18832:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Settings_$1020_storage",
                        "typeString": "struct Finance.Settings storage ref"
                      }
                    },
                    "id": 2010,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "periodDuration",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 1011,
                    "src": "18832:23:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 2008,
                  "id": 2011,
                  "nodeType": "Return",
                  "src": "18825:30:3"
                }
              ]
            },
            "documentation": null,
            "id": 2013,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getPeriodDuration",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2005,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18783:2:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 2008,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2007,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2013,
                  "src": "18807:6:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 2006,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "18807:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18806:8:3"
            },
            "scope": 2645,
            "src": "18757:105:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2036,
              "nodeType": "Block",
              "src": "18956:98:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2027,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2022,
                      "name": "budget",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2018,
                      "src": "18966:6:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2023,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1024,
                          "src": "18975:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$1020_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 2024,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "budgets",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1015,
                        "src": "18975:16:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 2026,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2025,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2015,
                        "src": "18992:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "18975:24:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18966:33:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2028,
                  "nodeType": "ExpressionStatement",
                  "src": "18966:33:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2034,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2029,
                      "name": "hasBudget",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2020,
                      "src": "19009:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2030,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1024,
                          "src": "19021:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$1020_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 2031,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hasBudget",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1019,
                        "src": "19021:18:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 2033,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2032,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2015,
                        "src": "19040:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "19021:26:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "19009:38:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2035,
                  "nodeType": "ExpressionStatement",
                  "src": "19009:38:3"
                }
              ]
            },
            "documentation": null,
            "id": 2037,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getBudget",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2016,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2015,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2037,
                  "src": "18887:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2014,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18887:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18886:16:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 2021,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2018,
                  "name": "budget",
                  "nodeType": "VariableDeclaration",
                  "scope": 2037,
                  "src": "18924:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2017,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18924:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2020,
                  "name": "hasBudget",
                  "nodeType": "VariableDeclaration",
                  "scope": 2037,
                  "src": "18940:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2019,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "18940:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18923:32:3"
            },
            "scope": 2645,
            "src": "18868:186:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2050,
              "nodeType": "Block",
              "src": "19255:51:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2047,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2039,
                        "src": "19292:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2046,
                      "name": "_getRemainingBudget",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2626,
                      "src": "19272:19:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 2048,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19272:27:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2045,
                  "id": 2049,
                  "nodeType": "Return",
                  "src": "19265:34:3"
                }
              ]
            },
            "documentation": "@dev We have to check for initialization as periods are only valid after initializing",
            "id": 2051,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": null,
                "id": 2042,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2041,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8703,
                  "src": "19223:13:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "19223:13:3"
              }
            ],
            "name": "getRemainingBudget",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2040,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2039,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2051,
                  "src": "19195:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2038,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19195:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19194:16:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 2045,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2044,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2051,
                  "src": "19246:7:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2043,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19246:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19245:9:3"
            },
            "scope": 2645,
            "src": "19167:139:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2061,
              "nodeType": "Block",
              "src": "19489:42:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 2058,
                      "name": "_currentPeriodId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2636,
                      "src": "19506:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                        "typeString": "function () view returns (uint64)"
                      }
                    },
                    "id": 2059,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19506:18:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 2057,
                  "id": 2060,
                  "nodeType": "Return",
                  "src": "19499:25:3"
                }
              ]
            },
            "documentation": "@dev We have to check for initialization as periods are only valid after initializing",
            "id": 2062,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": null,
                "id": 2054,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2053,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8703,
                  "src": "19458:13:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "19458:13:3"
              }
            ],
            "name": "currentPeriodId",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2052,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19443:2:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 2057,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2056,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2062,
                  "src": "19481:6:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 2055,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "19481:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19480:8:3"
            },
            "scope": 2645,
            "src": "19419:112:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2151,
              "nodeType": "Block",
              "src": "19679:1122:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2078,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2076,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2066,
                          "src": "19697:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2077,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "19707:1:3",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "19697:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2079,
                        "name": "ERROR_DEPOSIT_AMOUNT_ZERO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 931,
                        "src": "19710:25:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 2075,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "19689:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2080,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19689:47:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2081,
                  "nodeType": "ExpressionStatement",
                  "src": "19689:47:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2083,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2064,
                        "src": "19786:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2084,
                        "name": "_sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2070,
                        "src": "19806:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2085,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2066,
                        "src": "19827:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2086,
                        "name": "_reference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2068,
                        "src": "19848:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 2082,
                      "name": "_recordIncomingTransaction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2348,
                      "src": "19746:26:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,uint256,string memory)"
                      }
                    },
                    "id": 2087,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19746:122:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2088,
                  "nodeType": "ExpressionStatement",
                  "src": "19746:122:3"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 2089,
                    "name": "_isExternalDeposit",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2072,
                    "src": "20117:18:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2118,
                  "nodeType": "IfStatement",
                  "src": "20113:431:3",
                  "trueBody": {
                    "id": 2117,
                    "nodeType": "Block",
                    "src": "20137:407:3",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 2092,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2090,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2064,
                            "src": "20155:6:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2091,
                            "name": "ETH",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8620,
                            "src": "20165:3:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "20155:13:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 2115,
                          "nodeType": "Block",
                          "src": "20352:182:3",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2111,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 2108,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 12670,
                                        "src": "20476:3:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 2109,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "value",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "20476:9:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 2110,
                                      "name": "_amount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2066,
                                      "src": "20489:7:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "20476:20:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 2112,
                                    "name": "ERROR_VALUE_MISMATCH",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 949,
                                    "src": "20498:20:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_string_memory",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 2107,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    12673,
                                    12674
                                  ],
                                  "referencedDeclaration": 12674,
                                  "src": "20468:7:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 2113,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "20468:51:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2114,
                              "nodeType": "ExpressionStatement",
                              "src": "20468:51:3"
                            }
                          ]
                        },
                        "id": 2116,
                        "nodeType": "IfStatement",
                        "src": "20151:383:3",
                        "trueBody": {
                          "id": 2106,
                          "nodeType": "Block",
                          "src": "20170:176:3",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 2098,
                                          "name": "msg",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 12670,
                                          "src": "20268:3:3",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_message",
                                            "typeString": "msg"
                                          }
                                        },
                                        "id": 2099,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "sender",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "20268:10:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 2100,
                                        "name": "this",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 12791,
                                        "src": "20280:4:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_Finance_$2645",
                                          "typeString": "contract Finance"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 2101,
                                        "name": "_amount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2066,
                                        "src": "20286:7:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_contract$_Finance_$2645",
                                          "typeString": "contract Finance"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 2095,
                                            "name": "_token",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2064,
                                            "src": "20247:6:3",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "id": 2094,
                                          "name": "ERC20",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 11941,
                                          "src": "20241:5:3",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_ERC20_$11941_$",
                                            "typeString": "type(contract ERC20)"
                                          }
                                        },
                                        "id": 2096,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "20241:13:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_ERC20_$11941",
                                          "typeString": "contract ERC20"
                                        }
                                      },
                                      "id": 2097,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "transferFrom",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 11924,
                                      "src": "20241:26:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                        "typeString": "function (address,address,uint256) external returns (bool)"
                                      }
                                    },
                                    "id": 2102,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "20241:53:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 2103,
                                    "name": "ERROR_TOKEN_TRANSFER_FROM_REVERTED",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 946,
                                    "src": "20296:34:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_string_memory",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 2093,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    12673,
                                    12674
                                  ],
                                  "referencedDeclaration": 12674,
                                  "src": "20233:7:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 2104,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "20233:98:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2105,
                              "nodeType": "ExpressionStatement",
                              "src": "20233:98:3"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 2121,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2119,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2064,
                      "src": "20558:6:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2120,
                      "name": "ETH",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8620,
                      "src": "20568:3:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "20558:13:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 2149,
                    "nodeType": "Block",
                    "src": "20646:149:3",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2138,
                              "name": "vault",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1022,
                              "src": "20682:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Vault_$4917",
                                "typeString": "contract Vault"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2139,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2066,
                              "src": "20689:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_Vault_$4917",
                                "typeString": "contract Vault"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2135,
                                  "name": "_token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2064,
                                  "src": "20666:6:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 2134,
                                "name": "ERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11941,
                                "src": "20660:5:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_ERC20_$11941_$",
                                  "typeString": "type(contract ERC20)"
                                }
                              },
                              "id": 2136,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "20660:13:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$11941",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 2137,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "approve",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 11913,
                            "src": "20660:21:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,uint256) external returns (bool)"
                            }
                          },
                          "id": 2140,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20660:37:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2141,
                        "nodeType": "ExpressionStatement",
                        "src": "20660:37:3"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2145,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2064,
                              "src": "20768:6:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2146,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2066,
                              "src": "20776:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2142,
                              "name": "vault",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1022,
                              "src": "20754:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Vault_$4917",
                                "typeString": "contract Vault"
                              }
                            },
                            "id": 2144,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "deposit",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4769,
                            "src": "20754:13:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_payable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256) payable external"
                            }
                          },
                          "id": 2147,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20754:30:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2148,
                        "nodeType": "ExpressionStatement",
                        "src": "20754:30:3"
                      }
                    ]
                  },
                  "id": 2150,
                  "nodeType": "IfStatement",
                  "src": "20554:241:3",
                  "trueBody": {
                    "id": 2133,
                    "nodeType": "Block",
                    "src": "20573:67:3",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2129,
                              "name": "ETH",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8620,
                              "src": "20616:3:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2130,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2066,
                              "src": "20621:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 2127,
                                "name": "_amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2066,
                                "src": "20607:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2122,
                                  "name": "vault",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1022,
                                  "src": "20587:5:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Vault_$4917",
                                    "typeString": "contract Vault"
                                  }
                                },
                                "id": 2125,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "deposit",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4769,
                                "src": "20587:13:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_payable$_t_address_$_t_uint256_$returns$__$",
                                  "typeString": "function (address,uint256) payable external"
                                }
                              },
                              "id": 2126,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "value",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "20587:19:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_setvalue_nonpayable$_t_uint256_$returns$_t_function_external_payable$_t_address_$_t_uint256_$returns$__$value_$",
                                "typeString": "function (uint256) returns (function (address,uint256) payable external)"
                              }
                            },
                            "id": 2128,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "20587:28:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_payable$_t_address_$_t_uint256_$returns$__$value",
                              "typeString": "function (address,uint256) payable external"
                            }
                          },
                          "id": 2131,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20587:42:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2132,
                        "nodeType": "ExpressionStatement",
                        "src": "20587:42:3"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 2152,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_deposit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2073,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2064,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2152,
                  "src": "19576:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2063,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19576:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2066,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2152,
                  "src": "19592:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2065,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19592:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2068,
                  "name": "_reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 2152,
                  "src": "19609:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2067,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "19609:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2070,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 2152,
                  "src": "19628:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2069,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19628:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2072,
                  "name": "_isExternalDeposit",
                  "nodeType": "VariableDeclaration",
                  "scope": 2152,
                  "src": "19645:23:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2071,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "19645:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19575:94:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 2074,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19679:0:3"
            },
            "scope": 2645,
            "src": "19558:1243:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2210,
              "nodeType": "Block",
              "src": "20880:704:3",
              "statements": [
                {
                  "assignments": [
                    2160
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2160,
                      "name": "newPeriodId",
                      "nodeType": "VariableDeclaration",
                      "scope": 2211,
                      "src": "20983:18:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 2159,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "20983:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2163,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 2162,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "++",
                    "prefix": false,
                    "src": "21004:15:3",
                    "subExpression": {
                      "argumentTypes": null,
                      "id": 2161,
                      "name": "periodsLength",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1042,
                      "src": "21004:13:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20983:36:3"
                },
                {
                  "assignments": [
                    2165
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2165,
                      "name": "period",
                      "nodeType": "VariableDeclaration",
                      "scope": 2211,
                      "src": "21030:21:3",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                        "typeString": "struct Finance.Period"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2164,
                        "name": "Period",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 1009,
                        "src": "21030:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                          "typeString": "struct Finance.Period"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2169,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 2166,
                      "name": "periods",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1040,
                      "src": "21054:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$1009_storage_$",
                        "typeString": "mapping(uint64 => struct Finance.Period storage ref)"
                      }
                    },
                    "id": 2168,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 2167,
                      "name": "newPeriodId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2160,
                      "src": "21062:11:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "21054:20:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Period_$1009_storage",
                      "typeString": "struct Finance.Period storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21030:44:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2174,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2170,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2165,
                        "src": "21084:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                          "typeString": "struct Finance.Period storage pointer"
                        }
                      },
                      "id": 2172,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "startTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 998,
                      "src": "21084:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2173,
                      "name": "_startTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2154,
                      "src": "21103:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "21084:29:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 2175,
                  "nodeType": "ExpressionStatement",
                  "src": "21084:29:3"
                },
                {
                  "assignments": [
                    2177
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2177,
                      "name": "endTime",
                      "nodeType": "VariableDeclaration",
                      "scope": 2211,
                      "src": "21296:14:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 2176,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "21296:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2184,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 2183,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "id": 2181,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2178,
                        "name": "_startTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2154,
                        "src": "21313:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2179,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1024,
                          "src": "21326:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$1020_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 2180,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "periodDuration",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "21326:23:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "src": "21313:36:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 2182,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21352:1:3",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "21313:40:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21296:57:3"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 2187,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2185,
                      "name": "endTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2177,
                      "src": "21367:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2186,
                      "name": "_startTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2154,
                      "src": "21377:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "21367:20:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2193,
                  "nodeType": "IfStatement",
                  "src": "21363:85:3",
                  "trueBody": {
                    "id": 2192,
                    "nodeType": "Block",
                    "src": "21389:59:3",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2190,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2188,
                            "name": "endTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2177,
                            "src": "21417:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 2189,
                            "name": "MAX_UINT64",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 901,
                            "src": "21427:10:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "21417:20:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "id": 2191,
                        "nodeType": "ExpressionStatement",
                        "src": "21417:20:3"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2198,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2194,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2165,
                        "src": "21457:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                          "typeString": "struct Finance.Period storage pointer"
                        }
                      },
                      "id": 2196,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "endTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1000,
                      "src": "21457:14:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2197,
                      "name": "endTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2177,
                      "src": "21474:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "21457:24:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 2199,
                  "nodeType": "ExpressionStatement",
                  "src": "21457:24:3"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2201,
                        "name": "newPeriodId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2160,
                        "src": "21507:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2202,
                          "name": "period",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2165,
                          "src": "21520:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                            "typeString": "struct Finance.Period storage pointer"
                          }
                        },
                        "id": 2203,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "startTime",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 998,
                        "src": "21520:16:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2204,
                          "name": "period",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2165,
                          "src": "21538:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                            "typeString": "struct Finance.Period storage pointer"
                          }
                        },
                        "id": 2205,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "endTime",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1000,
                        "src": "21538:14:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 2200,
                      "name": "NewPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1050,
                      "src": "21497:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint64_$_t_uint64_$_t_uint64_$returns$__$",
                        "typeString": "function (uint64,uint64,uint64)"
                      }
                    },
                    "id": 2206,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21497:56:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2207,
                  "nodeType": "EmitStatement",
                  "src": "21492:61:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2208,
                    "name": "period",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2165,
                    "src": "21571:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                      "typeString": "struct Finance.Period storage pointer"
                    }
                  },
                  "functionReturnParameters": 2158,
                  "id": 2209,
                  "nodeType": "Return",
                  "src": "21564:13:3"
                }
              ]
            },
            "documentation": null,
            "id": 2211,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_newPeriod",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2155,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2154,
                  "name": "_startTime",
                  "nodeType": "VariableDeclaration",
                  "scope": 2211,
                  "src": "20827:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 2153,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "20827:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20826:19:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 2158,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2157,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2211,
                  "src": "20864:6:3",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                    "typeString": "struct Finance.Period"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2156,
                    "name": "Period",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1009,
                    "src": "20864:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                      "typeString": "struct Finance.Period"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20863:16:3"
            },
            "scope": 2645,
            "src": "20807:777:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2282,
              "nodeType": "Block",
              "src": "21644:778:3",
              "statements": [
                {
                  "assignments": [
                    2217
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2217,
                      "name": "payment",
                      "nodeType": "VariableDeclaration",
                      "scope": 2283,
                      "src": "21654:23:3",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                        "typeString": "struct Finance.Payment"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2216,
                        "name": "Payment",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 974,
                        "src": "21654:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2221,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 2218,
                      "name": "payments",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1028,
                      "src": "21680:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Payment_$974_storage_$",
                        "typeString": "mapping(uint256 => struct Finance.Payment storage ref)"
                      }
                    },
                    "id": 2220,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 2219,
                      "name": "_paymentId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2213,
                      "src": "21689:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "21680:20:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Payment_$974_storage",
                      "typeString": "struct Finance.Payment storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21654:46:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2225,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "21718:17:3",
                        "subExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2223,
                            "name": "payment",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2217,
                            "src": "21719:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                              "typeString": "struct Finance.Payment storage pointer"
                            }
                          },
                          "id": 2224,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "inactive",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 963,
                          "src": "21719:16:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2226,
                        "name": "ERROR_PAYMENT_INACTIVE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 952,
                        "src": "21737:22:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 2222,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "21710:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2227,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21710:50:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2228,
                  "nodeType": "ExpressionStatement",
                  "src": "21710:50:3"
                },
                {
                  "assignments": [
                    2230
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2230,
                      "name": "payed",
                      "nodeType": "VariableDeclaration",
                      "scope": 2283,
                      "src": "21771:12:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 2229,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "21771:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2232,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 2231,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "21786:1:3",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21771:16:3"
                },
                {
                  "body": {
                    "id": 2280,
                    "nodeType": "Block",
                    "src": "21884:532:3",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "id": 2249,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "21902:47:3",
                          "subExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2244,
                                  "name": "payment",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2217,
                                  "src": "21919:7:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                                    "typeString": "struct Finance.Payment storage pointer"
                                  }
                                },
                                "id": 2245,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "token",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 957,
                                "src": "21919:13:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2246,
                                  "name": "payment",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2217,
                                  "src": "21934:7:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                                    "typeString": "struct Finance.Payment storage pointer"
                                  }
                                },
                                "id": 2247,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "amount",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 965,
                                "src": "21934:14:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 2243,
                              "name": "_canMakePayment",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2580,
                              "src": "21903:15:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
                                "typeString": "function (address,uint256) view returns (bool)"
                              }
                            },
                            "id": 2248,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21903:46:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 2256,
                        "nodeType": "IfStatement",
                        "src": "21898:141:3",
                        "trueBody": {
                          "id": 2255,
                          "nodeType": "Block",
                          "src": "21951:88:3",
                          "statements": [
                            {
                              "eventCall": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 2251,
                                    "name": "_paymentId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2213,
                                    "src": "21989:10:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 2250,
                                  "name": "PaymentFailure",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1094,
                                  "src": "21974:14:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256)"
                                  }
                                },
                                "id": 2252,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "21974:26:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2253,
                              "nodeType": "EmitStatement",
                              "src": "21969:31:3"
                            },
                            {
                              "expression": null,
                              "functionReturnParameters": 2215,
                              "id": 2254,
                              "nodeType": "Return",
                              "src": "22018:7:3"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2261,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2257,
                              "name": "payment",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2217,
                              "src": "22131:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                                "typeString": "struct Finance.Payment storage pointer"
                              }
                            },
                            "id": 2259,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "repeats",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 973,
                            "src": "22131:15:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 2260,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "22150:1:3",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "22131:20:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "id": 2262,
                        "nodeType": "ExpressionStatement",
                        "src": "22131:20:3"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2265,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2263,
                            "name": "payed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2230,
                            "src": "22165:5:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 2264,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "22174:1:3",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "22165:10:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "id": 2266,
                        "nodeType": "ExpressionStatement",
                        "src": "22165:10:3"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2268,
                                "name": "payment",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2217,
                                "src": "22231:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                                  "typeString": "struct Finance.Payment storage pointer"
                                }
                              },
                              "id": 2269,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "token",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 957,
                              "src": "22231:13:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2270,
                                "name": "payment",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2217,
                                "src": "22262:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                                  "typeString": "struct Finance.Payment storage pointer"
                                }
                              },
                              "id": 2271,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "receiver",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 959,
                              "src": "22262:16:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2272,
                                "name": "payment",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2217,
                                "src": "22296:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                                  "typeString": "struct Finance.Payment storage pointer"
                                }
                              },
                              "id": 2273,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "amount",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 965,
                              "src": "22296:14:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2274,
                              "name": "_paymentId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2213,
                              "src": "22328:10:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2275,
                                "name": "payment",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2217,
                                "src": "22356:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                                  "typeString": "struct Finance.Payment storage pointer"
                                }
                              },
                              "id": 2276,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "repeats",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 973,
                              "src": "22356:15:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "",
                              "id": 2277,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "22389:2:3",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              },
                              "value": ""
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              }
                            ],
                            "id": 2267,
                            "name": "_makePaymentTransaction",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2326,
                            "src": "22190:23:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint64_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256,uint64,string memory)"
                            }
                          },
                          "id": 2278,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22190:215:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2279,
                        "nodeType": "ExpressionStatement",
                        "src": "22190:215:3"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 2242,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "id": 2238,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2234,
                            "name": "_paymentId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2213,
                            "src": "21820:10:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 2233,
                          "name": "nextPaymentTime",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2004,
                          "src": "21804:15:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint64_$",
                            "typeString": "function (uint256) view returns (uint64)"
                          }
                        },
                        "id": 2235,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21804:27:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 2236,
                          "name": "getTimestamp64",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8868,
                          "src": "21835:14:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                            "typeString": "function () view returns (uint64)"
                          }
                        },
                        "id": 2237,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21835:16:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "src": "21804:47:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2241,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2239,
                        "name": "payed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2230,
                        "src": "21855:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 2240,
                        "name": "MAX_PAYMENTS_PER_TX",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 889,
                        "src": "21863:19:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "21855:27:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "21804:78:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2281,
                  "nodeType": "WhileStatement",
                  "src": "21797:619:3"
                }
              ]
            },
            "documentation": null,
            "id": 2283,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_executePayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2214,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2213,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 2283,
                  "src": "21615:18:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2212,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21615:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21614:20:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 2215,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "21644:0:3"
            },
            "scope": 2645,
            "src": "21590:832:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2325,
              "nodeType": "Block",
              "src": "22656:344:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2303,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2300,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2285,
                              "src": "22694:6:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 2299,
                            "name": "_getRemainingBudget",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2626,
                            "src": "22674:19:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view returns (uint256)"
                            }
                          },
                          "id": 2301,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22674:27:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2302,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2289,
                          "src": "22705:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "22674:38:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2304,
                        "name": "ERROR_REMAINING_BUDGET",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 955,
                        "src": "22714:22:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 2298,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "22666:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2305,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22666:71:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2306,
                  "nodeType": "ExpressionStatement",
                  "src": "22666:71:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 2308,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "22779:5:3",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      },
                      {
                        "argumentTypes": null,
                        "id": 2309,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2285,
                        "src": "22798:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2310,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2287,
                        "src": "22818:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2311,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2289,
                        "src": "22841:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2312,
                        "name": "_paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2291,
                        "src": "22862:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2313,
                        "name": "_paymentRepeatNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2293,
                        "src": "22886:20:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2314,
                        "name": "_reference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2295,
                        "src": "22920:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 2307,
                      "name": "_recordTransaction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2490,
                      "src": "22747:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bool_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint64_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,address,address,uint256,uint256,uint64,string memory)"
                      }
                    },
                    "id": 2315,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22747:193:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2316,
                  "nodeType": "ExpressionStatement",
                  "src": "22747:193:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2320,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2285,
                        "src": "22966:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2321,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2287,
                        "src": "22974:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2322,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2289,
                        "src": "22985:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2317,
                        "name": "vault",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1022,
                        "src": "22951:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vault_$4917",
                          "typeString": "contract Vault"
                        }
                      },
                      "id": 2319,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4825,
                      "src": "22951:14:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256) external"
                      }
                    },
                    "id": 2323,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22951:42:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2324,
                  "nodeType": "ExpressionStatement",
                  "src": "22951:42:3"
                }
              ]
            },
            "documentation": null,
            "id": 2326,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_makePaymentTransaction",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2296,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2285,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2326,
                  "src": "22470:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2284,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "22470:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2287,
                  "name": "_receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 2326,
                  "src": "22494:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2286,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "22494:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2289,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2326,
                  "src": "22521:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2288,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22521:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2291,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 2326,
                  "src": "22546:18:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2290,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22546:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2293,
                  "name": "_paymentRepeatNumber",
                  "nodeType": "VariableDeclaration",
                  "scope": 2326,
                  "src": "22574:27:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 2292,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "22574:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2295,
                  "name": "_reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 2326,
                  "src": "22611:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2294,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "22611:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22460:174:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 2297,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "22656:0:3"
            },
            "scope": 2645,
            "src": "22428:572:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2347,
              "nodeType": "Block",
              "src": "23170:275:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "74727565",
                        "id": 2338,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "23212:4:3",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "argumentTypes": null,
                        "id": 2339,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2328,
                        "src": "23254:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2340,
                        "name": "_sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2330,
                        "src": "23274:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2341,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2332,
                        "src": "23295:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2342,
                        "name": "NO_PAYMENT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 883,
                        "src": "23316:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 2343,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "23377:1:3",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "id": 2344,
                        "name": "_reference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2334,
                        "src": "23418:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 2337,
                      "name": "_recordTransaction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2490,
                      "src": "23180:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bool_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint64_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,address,address,uint256,uint256,uint64,string memory)"
                      }
                    },
                    "id": 2345,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23180:258:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2346,
                  "nodeType": "ExpressionStatement",
                  "src": "23180:258:3"
                }
              ]
            },
            "documentation": null,
            "id": 2348,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_recordIncomingTransaction",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2335,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2328,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2348,
                  "src": "23051:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2327,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "23051:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2330,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 2348,
                  "src": "23075:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2329,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "23075:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2332,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2348,
                  "src": "23100:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2331,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23100:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2334,
                  "name": "_reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 2348,
                  "src": "23125:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2333,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "23125:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23041:107:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 2336,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "23170:0:3"
            },
            "scope": 2645,
            "src": "23006:439:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2489,
              "nodeType": "Block",
              "src": "23696:1084:3",
              "statements": [
                {
                  "assignments": [
                    2366
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2366,
                      "name": "periodId",
                      "nodeType": "VariableDeclaration",
                      "scope": 2490,
                      "src": "23706:15:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 2365,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "23706:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2369,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 2367,
                      "name": "_currentPeriodId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2636,
                      "src": "23724:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                        "typeString": "function () view returns (uint64)"
                      }
                    },
                    "id": 2368,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23724:18:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23706:36:3"
                },
                {
                  "assignments": [
                    2371
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2371,
                      "name": "tokenStatement",
                      "nodeType": "VariableDeclaration",
                      "scope": 2490,
                      "src": "23752:37:3",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TokenStatement_$996_storage_ptr",
                        "typeString": "struct Finance.TokenStatement"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2370,
                        "name": "TokenStatement",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 996,
                        "src": "23752:14:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenStatement_$996_storage_ptr",
                          "typeString": "struct Finance.TokenStatement"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2378,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2372,
                          "name": "periods",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1040,
                          "src": "23792:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$1009_storage_$",
                            "typeString": "mapping(uint64 => struct Finance.Period storage ref)"
                          }
                        },
                        "id": 2374,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 2373,
                          "name": "periodId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2366,
                          "src": "23800:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "23792:17:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$1009_storage",
                          "typeString": "struct Finance.Period storage ref"
                        }
                      },
                      "id": 2375,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "tokenStatement",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1008,
                      "src": "23792:32:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TokenStatement_$996_storage_$",
                        "typeString": "mapping(address => struct Finance.TokenStatement storage ref)"
                      }
                    },
                    "id": 2377,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 2376,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2352,
                      "src": "23825:6:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "23792:40:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TokenStatement_$996_storage",
                      "typeString": "struct Finance.TokenStatement storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23752:80:3"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 2379,
                    "name": "_incoming",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2350,
                    "src": "23846:9:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 2401,
                    "nodeType": "Block",
                    "src": "23946:87:3",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2399,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2391,
                              "name": "tokenStatement",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2371,
                              "src": "23960:14:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TokenStatement_$996_storage_ptr",
                                "typeString": "struct Finance.TokenStatement storage pointer"
                              }
                            },
                            "id": 2393,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "expenses",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 993,
                            "src": "23960:23:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 2397,
                                "name": "_amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2356,
                                "src": "24014:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2394,
                                  "name": "tokenStatement",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2371,
                                  "src": "23986:14:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TokenStatement_$996_storage_ptr",
                                    "typeString": "struct Finance.TokenStatement storage pointer"
                                  }
                                },
                                "id": 2395,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "expenses",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 993,
                                "src": "23986:23:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2396,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 11689,
                              "src": "23986:27:3",
                              "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": 2398,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "23986:36:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "23960:62:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2400,
                        "nodeType": "ExpressionStatement",
                        "src": "23960:62:3"
                      }
                    ]
                  },
                  "id": 2402,
                  "nodeType": "IfStatement",
                  "src": "23842:191:3",
                  "trueBody": {
                    "id": 2390,
                    "nodeType": "Block",
                    "src": "23857:83:3",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2388,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2380,
                              "name": "tokenStatement",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2371,
                              "src": "23871:14:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TokenStatement_$996_storage_ptr",
                                "typeString": "struct Finance.TokenStatement storage pointer"
                              }
                            },
                            "id": 2382,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "income",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 995,
                            "src": "23871:21:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 2386,
                                "name": "_amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2356,
                                "src": "23921:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2383,
                                  "name": "tokenStatement",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2371,
                                  "src": "23895:14:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TokenStatement_$996_storage_ptr",
                                    "typeString": "struct Finance.TokenStatement storage pointer"
                                  }
                                },
                                "id": 2384,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "income",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 995,
                                "src": "23895:21:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2385,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 11689,
                              "src": "23895:25:3",
                              "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": 2387,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "23895:34:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "23871:58:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2389,
                        "nodeType": "ExpressionStatement",
                        "src": "23871:58:3"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2404
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2404,
                      "name": "transactionId",
                      "nodeType": "VariableDeclaration",
                      "scope": 2490,
                      "src": "24043:21:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2403,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "24043:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2407,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 2406,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "++",
                    "prefix": false,
                    "src": "24067:23:3",
                    "subExpression": {
                      "argumentTypes": null,
                      "id": 2405,
                      "name": "transactionsNextIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1036,
                      "src": "24067:21:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24043:47:3"
                },
                {
                  "assignments": [
                    2409
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2409,
                      "name": "transaction",
                      "nodeType": "VariableDeclaration",
                      "scope": 2490,
                      "src": "24100:31:3",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                        "typeString": "struct Finance.Transaction"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2408,
                        "name": "Transaction",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 991,
                        "src": "24100:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2413,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 2410,
                      "name": "transactions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1034,
                      "src": "24134:12:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Transaction_$991_storage_$",
                        "typeString": "mapping(uint256 => struct Finance.Transaction storage ref)"
                      }
                    },
                    "id": 2412,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 2411,
                      "name": "transactionId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2404,
                      "src": "24147:13:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "24134:27:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Transaction_$991_storage",
                      "typeString": "struct Finance.Transaction storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24100:61:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2418,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2414,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2409,
                        "src": "24171:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 2416,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "token",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 976,
                      "src": "24171:17:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2417,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2352,
                      "src": "24191:6:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "24171:26:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 2419,
                  "nodeType": "ExpressionStatement",
                  "src": "24171:26:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2424,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2420,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2409,
                        "src": "24207:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 2422,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "entity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 978,
                      "src": "24207:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2423,
                      "name": "_entity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2354,
                      "src": "24228:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "24207:28:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 2425,
                  "nodeType": "ExpressionStatement",
                  "src": "24207:28:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2430,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2426,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2409,
                        "src": "24245:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 2428,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "isIncoming",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 980,
                      "src": "24245:22:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2429,
                      "name": "_incoming",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2350,
                      "src": "24270:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "24245:34:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2431,
                  "nodeType": "ExpressionStatement",
                  "src": "24245:34:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2436,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2432,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2409,
                        "src": "24289:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 2434,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 982,
                      "src": "24289:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2435,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2356,
                      "src": "24310:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "24289:28:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2437,
                  "nodeType": "ExpressionStatement",
                  "src": "24289:28:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2442,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2438,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2409,
                        "src": "24327:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 2440,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "paymentId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 984,
                      "src": "24327:21:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2441,
                      "name": "_paymentId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2358,
                      "src": "24351:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "24327:34:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2443,
                  "nodeType": "ExpressionStatement",
                  "src": "24327:34:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2448,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2444,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2409,
                        "src": "24371:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 2446,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "paymentRepeatNumber",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 986,
                      "src": "24371:31:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2447,
                      "name": "_paymentRepeatNumber",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2360,
                      "src": "24405:20:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "24371:54:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 2449,
                  "nodeType": "ExpressionStatement",
                  "src": "24371:54:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2455,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2450,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2409,
                        "src": "24435:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 2452,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "date",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 988,
                      "src": "24435:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 2453,
                        "name": "getTimestamp64",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8868,
                        "src": "24454:14:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                          "typeString": "function () view returns (uint64)"
                        }
                      },
                      "id": 2454,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "24454:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "24435:35:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 2456,
                  "nodeType": "ExpressionStatement",
                  "src": "24435:35:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2461,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2457,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2409,
                        "src": "24480:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 2459,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "periodId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 990,
                      "src": "24480:20:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2460,
                      "name": "periodId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2366,
                      "src": "24503:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "24480:31:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 2462,
                  "nodeType": "ExpressionStatement",
                  "src": "24480:31:3"
                },
                {
                  "assignments": [
                    2464
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2464,
                      "name": "period",
                      "nodeType": "VariableDeclaration",
                      "scope": 2490,
                      "src": "24522:21:3",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                        "typeString": "struct Finance.Period"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2463,
                        "name": "Period",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 1009,
                        "src": "24522:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                          "typeString": "struct Finance.Period"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2468,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 2465,
                      "name": "periods",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1040,
                      "src": "24546:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$1009_storage_$",
                        "typeString": "mapping(uint64 => struct Finance.Period storage ref)"
                      }
                    },
                    "id": 2467,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 2466,
                      "name": "periodId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2366,
                      "src": "24554:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "24546:17:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Period_$1009_storage",
                      "typeString": "struct Finance.Period storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24522:41:3"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2472,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2469,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2464,
                        "src": "24577:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                          "typeString": "struct Finance.Period storage pointer"
                        }
                      },
                      "id": 2470,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "firstTransactionId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1002,
                      "src": "24577:25:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2471,
                      "name": "NO_TRANSACTION",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 886,
                      "src": "24606:14:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "24577:43:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2480,
                  "nodeType": "IfStatement",
                  "src": "24573:115:3",
                  "trueBody": {
                    "id": 2479,
                    "nodeType": "Block",
                    "src": "24622:66:3",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2477,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2473,
                              "name": "period",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2464,
                              "src": "24636:6:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                                "typeString": "struct Finance.Period storage pointer"
                              }
                            },
                            "id": 2475,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "firstTransactionId",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1002,
                            "src": "24636:25:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 2476,
                            "name": "transactionId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2404,
                            "src": "24664:13:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "24636:41:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2478,
                        "nodeType": "ExpressionStatement",
                        "src": "24636:41:3"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2482,
                        "name": "transactionId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2404,
                        "src": "24718:13:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2483,
                        "name": "_incoming",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2350,
                        "src": "24733:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2484,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2354,
                        "src": "24744:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2485,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2356,
                        "src": "24753:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2486,
                        "name": "_reference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2362,
                        "src": "24762:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 2481,
                      "name": "NewTransaction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1080,
                      "src": "24703:14:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_bool_$_t_address_$_t_uint256_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (uint256,bool,address,uint256,string memory)"
                      }
                    },
                    "id": 2487,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24703:70:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2488,
                  "nodeType": "EmitStatement",
                  "src": "24698:75:3"
                }
              ]
            },
            "documentation": null,
            "id": 2490,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_recordTransaction",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2363,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2350,
                  "name": "_incoming",
                  "nodeType": "VariableDeclaration",
                  "scope": 2490,
                  "src": "23488:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2349,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "23488:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2352,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2490,
                  "src": "23512:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2351,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "23512:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2354,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 2490,
                  "src": "23536:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2353,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "23536:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2356,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2490,
                  "src": "23561:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2355,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23561:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2358,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 2490,
                  "src": "23586:18:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2357,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23586:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2360,
                  "name": "_paymentRepeatNumber",
                  "nodeType": "VariableDeclaration",
                  "scope": 2490,
                  "src": "23614:27:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 2359,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "23614:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2362,
                  "name": "_reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 2490,
                  "src": "23651:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2361,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "23651:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23478:196:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 2364,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "23696:0:3"
            },
            "scope": 2645,
            "src": "23451:1329:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2556,
              "nodeType": "Block",
              "src": "24883:976:3",
              "statements": [
                {
                  "assignments": [
                    2498
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2498,
                      "name": "currentPeriod",
                      "nodeType": "VariableDeclaration",
                      "scope": 2557,
                      "src": "24893:28:3",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                        "typeString": "struct Finance.Period"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2497,
                        "name": "Period",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 1009,
                        "src": "24893:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                          "typeString": "struct Finance.Period"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2503,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 2499,
                      "name": "periods",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1040,
                      "src": "24924:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$1009_storage_$",
                        "typeString": "mapping(uint64 => struct Finance.Period storage ref)"
                      }
                    },
                    "id": 2502,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 2500,
                        "name": "_currentPeriodId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2636,
                        "src": "24932:16:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                          "typeString": "function () view returns (uint64)"
                        }
                      },
                      "id": 2501,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "24932:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "24924:27:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Period_$1009_storage",
                      "typeString": "struct Finance.Period storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24893:58:3"
                },
                {
                  "assignments": [
                    2505
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2505,
                      "name": "timestamp",
                      "nodeType": "VariableDeclaration",
                      "scope": 2557,
                      "src": "24961:16:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 2504,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "24961:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2508,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 2506,
                      "name": "getTimestamp64",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8868,
                      "src": "24980:14:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                        "typeString": "function () view returns (uint64)"
                      }
                    },
                    "id": 2507,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24980:16:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24961:35:3"
                },
                {
                  "body": {
                    "id": 2552,
                    "nodeType": "Block",
                    "src": "25092:739:3",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2515,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2513,
                            "name": "_maxTransitions",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2492,
                            "src": "25110:15:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 2514,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "25129:1:3",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "25110:20:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 2519,
                        "nodeType": "IfStatement",
                        "src": "25106:215:3",
                        "trueBody": {
                          "id": 2518,
                          "nodeType": "Block",
                          "src": "25132:189:3",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "hexValue": "66616c7365",
                                "id": 2516,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "25301:5:3",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              "functionReturnParameters": 2496,
                              "id": 2517,
                              "nodeType": "Return",
                              "src": "25294:12:3"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2525,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2520,
                            "name": "_maxTransitions",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2492,
                            "src": "25334:15:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 2523,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "25372:1:3",
                                "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"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 2521,
                                "name": "_maxTransitions",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2492,
                                "src": "25352:15:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2522,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 11664,
                              "src": "25352:19:3",
                              "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": 2524,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "25352:22:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "25334:40:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2526,
                        "nodeType": "ExpressionStatement",
                        "src": "25334:40:3"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2530,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2527,
                              "name": "currentPeriod",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2498,
                              "src": "25554:13:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                                "typeString": "struct Finance.Period storage pointer"
                              }
                            },
                            "id": 2528,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "firstTransactionId",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1002,
                            "src": "25554:32:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2529,
                            "name": "NO_TRANSACTION",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 886,
                            "src": "25590:14:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "25554:50:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 2541,
                        "nodeType": "IfStatement",
                        "src": "25550:151:3",
                        "trueBody": {
                          "id": 2540,
                          "nodeType": "Block",
                          "src": "25606:95:3",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 2538,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2531,
                                    "name": "currentPeriod",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2498,
                                    "src": "25624:13:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                                      "typeString": "struct Finance.Period storage pointer"
                                    }
                                  },
                                  "id": 2533,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "lastTransactionId",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1004,
                                  "src": "25624:31:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "31",
                                      "id": 2536,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "25684:1:3",
                                      "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"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2534,
                                      "name": "transactionsNextIndex",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1036,
                                      "src": "25658:21:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 2535,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sub",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 11664,
                                    "src": "25658:25:3",
                                    "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": 2537,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "25658:28:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "25624:62:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2539,
                              "nodeType": "ExpressionStatement",
                              "src": "25624:62:3"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2550,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2542,
                            "name": "currentPeriod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2498,
                            "src": "25764:13:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                              "typeString": "struct Finance.Period storage pointer"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 2547,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "25817:1:3",
                                    "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"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2544,
                                      "name": "currentPeriod",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2498,
                                      "src": "25791:13:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                                        "typeString": "struct Finance.Period storage pointer"
                                      }
                                    },
                                    "id": 2545,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "endTime",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1000,
                                    "src": "25791:21:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint64",
                                      "typeString": "uint64"
                                    }
                                  },
                                  "id": 2546,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "add",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 11831,
                                  "src": "25791:25:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint64_$_t_uint64_$returns$_t_uint64_$bound_to$_t_uint64_$",
                                    "typeString": "function (uint64,uint64) pure returns (uint64)"
                                  }
                                },
                                "id": 2548,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "25791:28:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              ],
                              "id": 2543,
                              "name": "_newPeriod",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2211,
                              "src": "25780:10:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_uint64_$returns$_t_struct$_Period_$1009_storage_ptr_$",
                                "typeString": "function (uint64) returns (struct Finance.Period storage pointer)"
                              }
                            },
                            "id": 2549,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "25780:40:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                              "typeString": "struct Finance.Period storage pointer"
                            }
                          },
                          "src": "25764:56:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                            "typeString": "struct Finance.Period storage pointer"
                          }
                        },
                        "id": 2551,
                        "nodeType": "ExpressionStatement",
                        "src": "25764:56:3"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 2512,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2509,
                      "name": "timestamp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2505,
                      "src": "25057:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2510,
                        "name": "currentPeriod",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2498,
                        "src": "25069:13:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                          "typeString": "struct Finance.Period storage pointer"
                        }
                      },
                      "id": 2511,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "endTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1000,
                      "src": "25069:21:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "25057:33:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2553,
                  "nodeType": "WhileStatement",
                  "src": "25050:781:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 2554,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "25848:4:3",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 2496,
                  "id": 2555,
                  "nodeType": "Return",
                  "src": "25841:11:3"
                }
              ]
            },
            "documentation": null,
            "id": 2557,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_tryTransitionAccountingPeriod",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2493,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2492,
                  "name": "_maxTransitions",
                  "nodeType": "VariableDeclaration",
                  "scope": 2557,
                  "src": "24826:23:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2491,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24826:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24825:25:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 2496,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2495,
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 2557,
                  "src": "24869:12:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2494,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "24869:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24868:14:3"
            },
            "scope": 2645,
            "src": "24786:1073:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2579,
              "nodeType": "Block",
              "src": "25952:98:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 2577,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2570,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2567,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2559,
                            "src": "25989:6:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 2566,
                          "name": "_getRemainingBudget",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2626,
                          "src": "25969:19:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view returns (uint256)"
                          }
                        },
                        "id": 2568,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "25969:27:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 2569,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2561,
                        "src": "26000:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "25969:38:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2576,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2573,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2559,
                            "src": "26025:6:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 2571,
                            "name": "vault",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1022,
                            "src": "26011:5:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Vault_$4917",
                              "typeString": "contract Vault"
                            }
                          },
                          "id": 2572,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balance",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4851,
                          "src": "26011:13:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view external returns (uint256)"
                          }
                        },
                        "id": 2574,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "26011:21:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 2575,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2561,
                        "src": "26036:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "26011:32:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "25969:74:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2565,
                  "id": 2578,
                  "nodeType": "Return",
                  "src": "25962:81:3"
                }
              ]
            },
            "documentation": null,
            "id": 2580,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_canMakePayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2562,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2559,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2580,
                  "src": "25890:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2558,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "25890:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2561,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2580,
                  "src": "25906:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2560,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25906:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25889:33:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 2565,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2564,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2580,
                  "src": "25946:4:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2563,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "25946:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25945:6:3"
            },
            "scope": 2645,
            "src": "25865:185:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2625,
              "nodeType": "Block",
              "src": "26133:467:3",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 2591,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "26147:27:3",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2587,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1024,
                          "src": "26148:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$1020_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 2588,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hasBudget",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1019,
                        "src": "26148:18:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 2590,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2589,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2582,
                        "src": "26167:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "26148:26:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2595,
                  "nodeType": "IfStatement",
                  "src": "26143:73:3",
                  "trueBody": {
                    "id": 2594,
                    "nodeType": "Block",
                    "src": "26176:40:3",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2592,
                          "name": "MAX_UINT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 895,
                          "src": "26197:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2586,
                        "id": 2593,
                        "nodeType": "Return",
                        "src": "26190:15:3"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2597
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2597,
                      "name": "spent",
                      "nodeType": "VariableDeclaration",
                      "scope": 2626,
                      "src": "26226:13:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2596,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "26226:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2606,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 2598,
                            "name": "periods",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1040,
                            "src": "26242:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$1009_storage_$",
                              "typeString": "mapping(uint64 => struct Finance.Period storage ref)"
                            }
                          },
                          "id": 2601,
                          "indexExpression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 2599,
                              "name": "_currentPeriodId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2636,
                              "src": "26250:16:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                                "typeString": "function () view returns (uint64)"
                              }
                            },
                            "id": 2600,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "26250:18:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "26242:27:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Period_$1009_storage",
                            "typeString": "struct Finance.Period storage ref"
                          }
                        },
                        "id": 2602,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "tokenStatement",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1008,
                        "src": "26242:42:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TokenStatement_$996_storage_$",
                          "typeString": "mapping(address => struct Finance.TokenStatement storage ref)"
                        }
                      },
                      "id": 2604,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2603,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2582,
                        "src": "26285:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "26242:50:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TokenStatement_$996_storage",
                        "typeString": "struct Finance.TokenStatement storage ref"
                      }
                    },
                    "id": 2605,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "expenses",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 993,
                    "src": "26242:59:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26226:75:3"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2612,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2607,
                      "name": "spent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2597,
                      "src": "26473:5:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2608,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1024,
                          "src": "26482:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$1020_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 2609,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "budgets",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1015,
                        "src": "26482:16:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 2611,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2610,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2582,
                        "src": "26499:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "26482:24:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "26473:33:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2616,
                  "nodeType": "IfStatement",
                  "src": "26469:72:3",
                  "trueBody": {
                    "id": 2615,
                    "nodeType": "Block",
                    "src": "26508:33:3",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2613,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "26529:1:3",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 2586,
                        "id": 2614,
                        "nodeType": "Return",
                        "src": "26522:8:3"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2622,
                        "name": "spent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2597,
                        "src": "26587:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2617,
                            "name": "settings",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1024,
                            "src": "26558:8:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Settings_$1020_storage",
                              "typeString": "struct Finance.Settings storage ref"
                            }
                          },
                          "id": 2618,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "budgets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1015,
                          "src": "26558:16:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                          }
                        },
                        "id": 2620,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 2619,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2582,
                          "src": "26575:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "26558:24:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 2621,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11664,
                      "src": "26558:28:3",
                      "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": 2623,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26558:35:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2586,
                  "id": 2624,
                  "nodeType": "Return",
                  "src": "26551:42:3"
                }
              ]
            },
            "documentation": null,
            "id": 2626,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_getRemainingBudget",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2583,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2582,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2626,
                  "src": "26085:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2581,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "26085:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26084:16:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 2586,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2585,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2626,
                  "src": "26124:7:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2584,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26124:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26123:9:3"
            },
            "scope": 2645,
            "src": "26056:544:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2635,
              "nodeType": "Block",
              "src": "26665:129:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 2633,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2631,
                      "name": "periodsLength",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1042,
                      "src": "26770:13:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 2632,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26786:1:3",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "26770:17:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 2630,
                  "id": 2634,
                  "nodeType": "Return",
                  "src": "26763:24:3"
                }
              ]
            },
            "documentation": null,
            "id": 2636,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_currentPeriodId",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2627,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26631:2:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 2630,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2629,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2636,
                  "src": "26657:6:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 2628,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "26657:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26656:8:3"
            },
            "scope": 2645,
            "src": "26606:188:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2643,
              "nodeType": "Block",
              "src": "26907:22:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2641,
                    "name": "MAX_UINT64",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 901,
                    "src": "26916:10:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 2640,
                  "id": 2642,
                  "nodeType": "Return",
                  "src": "26909:17:3"
                }
              ]
            },
            "documentation": null,
            "id": 2644,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getMaxPeriodTransitions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2637,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26873:2:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 2640,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2639,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2644,
                  "src": "26899:6:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 2638,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "26899:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26898:8:3"
            },
            "scope": 2645,
            "src": "26841:88:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 2646,
        "src": "458:26473:3"
      }
    ],
    "src": "57:26875:3"
  },
  "legacyAST": {
    "absolutePath": "@aragon/apps-finance/contracts/Finance.sol",
    "exportedSymbols": {
      "Finance": [
        2645
      ]
    },
    "id": 2646,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 836,
        "literals": [
          "solidity",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "57:23:3"
      },
      {
        "absolutePath": "@aragon/os/contracts/apps/AragonApp.sol",
        "file": "@aragon/os/contracts/apps/AragonApp.sol",
        "id": 837,
        "nodeType": "ImportDirective",
        "scope": 2646,
        "sourceUnit": 8476,
        "src": "82:49:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/EtherTokenConstant.sol",
        "file": "@aragon/os/contracts/common/EtherTokenConstant.sol",
        "id": 838,
        "nodeType": "ImportDirective",
        "scope": 2646,
        "sourceUnit": 8622,
        "src": "132:60:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/IsContract.sol",
        "file": "@aragon/os/contracts/common/IsContract.sol",
        "id": 839,
        "nodeType": "ImportDirective",
        "scope": 2646,
        "sourceUnit": 8790,
        "src": "193:52:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/lib/token/ERC20.sol",
        "file": "@aragon/os/contracts/lib/token/ERC20.sol",
        "id": 840,
        "nodeType": "ImportDirective",
        "scope": 2646,
        "sourceUnit": 11942,
        "src": "247:50:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/lib/math/SafeMath.sol",
        "file": "@aragon/os/contracts/lib/math/SafeMath.sol",
        "id": 841,
        "nodeType": "ImportDirective",
        "scope": 2646,
        "sourceUnit": 11712,
        "src": "298:52:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/lib/math/SafeMath64.sol",
        "file": "@aragon/os/contracts/lib/math/SafeMath64.sol",
        "id": 842,
        "nodeType": "ImportDirective",
        "scope": 2646,
        "sourceUnit": 11854,
        "src": "351:54:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/apps-vault/contracts/Vault.sol",
        "file": "@aragon/apps-vault/contracts/Vault.sol",
        "id": 843,
        "nodeType": "ImportDirective",
        "scope": 2646,
        "sourceUnit": 4918,
        "src": "407:48:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 844,
              "name": "EtherTokenConstant",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8621,
              "src": "478:18:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_EtherTokenConstant_$8621",
                "typeString": "contract EtherTokenConstant"
              }
            },
            "id": 845,
            "nodeType": "InheritanceSpecifier",
            "src": "478:18:3"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 846,
              "name": "IsContract",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8789,
              "src": "498:10:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IsContract_$8789",
                "typeString": "contract IsContract"
              }
            },
            "id": 847,
            "nodeType": "InheritanceSpecifier",
            "src": "498:10:3"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 848,
              "name": "AragonApp",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8475,
              "src": "510:9:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AragonApp_$8475",
                "typeString": "contract AragonApp"
              }
            },
            "id": 849,
            "nodeType": "InheritanceSpecifier",
            "src": "510:9:3"
          }
        ],
        "contractDependencies": [
          7585,
          8347,
          8475,
          8488,
          8621,
          8663,
          8761,
          8789,
          8822,
          8869,
          9066,
          9476,
          9503,
          10769
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 2645,
        "linearizedBaseContracts": [
          2645,
          8475,
          7585,
          9476,
          10769,
          9503,
          9066,
          8789,
          8621,
          8663,
          8488,
          8822,
          8761,
          8869,
          8347
        ],
        "name": "Finance",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 852,
            "libraryName": {
              "contractScope": null,
              "id": 850,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 11711,
              "src": "532:8:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$11711",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "526:27:3",
            "typeName": {
              "id": 851,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "545:7:3",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 855,
            "libraryName": {
              "contractScope": null,
              "id": 853,
              "name": "SafeMath64",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 11853,
              "src": "564:10:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath64_$11853",
                "typeString": "library SafeMath64"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "558:28:3",
            "typeName": {
              "id": 854,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "579:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            }
          },
          {
            "constant": true,
            "id": 860,
            "name": "CREATE_PAYMENTS_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "592:80:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 856,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "592:7:3",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "4352454154455f5041594d454e54535f524f4c45",
                  "id": 858,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "649:22:3",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_5de467a460382d13defdc02aacddc9c7d6605d6d4e0b8bd2f70732cae8ea17bc",
                    "typeString": "literal_string \"CREATE_PAYMENTS_ROLE\""
                  },
                  "value": "CREATE_PAYMENTS_ROLE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_5de467a460382d13defdc02aacddc9c7d6605d6d4e0b8bd2f70732cae8ea17bc",
                    "typeString": "literal_string \"CREATE_PAYMENTS_ROLE\""
                  }
                ],
                "id": 857,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 12664,
                "src": "639:9:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                  "typeString": "function () pure returns (bytes32)"
                }
              },
              "id": 859,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "639:33:3",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 865,
            "name": "CHANGE_PERIOD_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "678:76:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 861,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "678:7:3",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "4348414e47455f504552494f445f524f4c45",
                  "id": 863,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "733:20:3",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_d35e458bacdd5343c2f050f574554b2f417a8ea38d6a9a65ce2225dbe8bb9a9d",
                    "typeString": "literal_string \"CHANGE_PERIOD_ROLE\""
                  },
                  "value": "CHANGE_PERIOD_ROLE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_d35e458bacdd5343c2f050f574554b2f417a8ea38d6a9a65ce2225dbe8bb9a9d",
                    "typeString": "literal_string \"CHANGE_PERIOD_ROLE\""
                  }
                ],
                "id": 862,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 12664,
                "src": "723:9:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                  "typeString": "function () pure returns (bytes32)"
                }
              },
              "id": 864,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "723:31:3",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 870,
            "name": "CHANGE_BUDGETS_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "760:78:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 866,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "760:7:3",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "4348414e47455f425544474554535f524f4c45",
                  "id": 868,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "816:21:3",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_d79730e82bfef7d2f9639b9d10bf37ebb662b22ae2211502a00bdf7b2cc3a23a",
                    "typeString": "literal_string \"CHANGE_BUDGETS_ROLE\""
                  },
                  "value": "CHANGE_BUDGETS_ROLE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_d79730e82bfef7d2f9639b9d10bf37ebb662b22ae2211502a00bdf7b2cc3a23a",
                    "typeString": "literal_string \"CHANGE_BUDGETS_ROLE\""
                  }
                ],
                "id": 867,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 12664,
                "src": "806:9:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                  "typeString": "function () pure returns (bytes32)"
                }
              },
              "id": 869,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "806:32:3",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 875,
            "name": "EXECUTE_PAYMENTS_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "844:82:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 871,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "844:7:3",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "455845435554455f5041594d454e54535f524f4c45",
                  "id": 873,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "902:23:3",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_563165d3eae48bcb0a092543ca070d989169c98357e9a1b324ec5da44bab75fd",
                    "typeString": "literal_string \"EXECUTE_PAYMENTS_ROLE\""
                  },
                  "value": "EXECUTE_PAYMENTS_ROLE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_563165d3eae48bcb0a092543ca070d989169c98357e9a1b324ec5da44bab75fd",
                    "typeString": "literal_string \"EXECUTE_PAYMENTS_ROLE\""
                  }
                ],
                "id": 872,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 12664,
                "src": "892:9:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                  "typeString": "function () pure returns (bytes32)"
                }
              },
              "id": 874,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "892:34:3",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 880,
            "name": "MANAGE_PAYMENTS_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "932:80:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 876,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "932:7:3",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "4d414e4147455f5041594d454e54535f524f4c45",
                  "id": 878,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "989:22:3",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_30597dd103acfaef0649675953d9cb22faadab7e9d9ed57acc1c429d04b80777",
                    "typeString": "literal_string \"MANAGE_PAYMENTS_ROLE\""
                  },
                  "value": "MANAGE_PAYMENTS_ROLE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_30597dd103acfaef0649675953d9cb22faadab7e9d9ed57acc1c429d04b80777",
                    "typeString": "literal_string \"MANAGE_PAYMENTS_ROLE\""
                  }
                ],
                "id": 877,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 12664,
                "src": "979:9:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                  "typeString": "function () pure returns (bytes32)"
                }
              },
              "id": 879,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "979:33:3",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 883,
            "name": "NO_PAYMENT",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "1019:40:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 881,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1019:7:3",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30",
              "id": 882,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1058:1:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
              },
              "value": "0"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 886,
            "name": "NO_TRANSACTION",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "1065:44:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 884,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1065:7:3",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30",
              "id": 885,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1108:1:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
              },
              "value": "0"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 889,
            "name": "MAX_PAYMENTS_PER_TX",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "1115:50:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 887,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1115:7:3",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3230",
              "id": 888,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1163:2:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_20_by_1",
                "typeString": "int_const 20"
              },
              "value": "20"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 895,
            "name": "MAX_UINT",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "1171:48:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 890,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1171:7:3",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "id": 893,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "nodeType": "UnaryOperation",
                  "operator": "-",
                  "prefix": true,
                  "src": "1216:2:3",
                  "subExpression": {
                    "argumentTypes": null,
                    "hexValue": "31",
                    "id": 892,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1217:1:3",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    },
                    "value": "1"
                  },
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_-1_by_1",
                    "typeString": "int_const -1"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_rational_-1_by_1",
                    "typeString": "int_const -1"
                  }
                ],
                "id": 891,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1208:7:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_uint256_$",
                  "typeString": "type(uint256)"
                },
                "typeName": "uint256"
              },
              "id": 894,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1208:11:3",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 901,
            "name": "MAX_UINT64",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "1225:48:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 896,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "1225:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "id": 899,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "nodeType": "UnaryOperation",
                  "operator": "-",
                  "prefix": true,
                  "src": "1270:2:3",
                  "subExpression": {
                    "argumentTypes": null,
                    "hexValue": "31",
                    "id": 898,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1271:1:3",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    },
                    "value": "1"
                  },
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_-1_by_1",
                    "typeString": "int_const -1"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_rational_-1_by_1",
                    "typeString": "int_const -1"
                  }
                ],
                "id": 897,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1263:6:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_uint64_$",
                  "typeString": "type(uint64)"
                },
                "typeName": "uint64"
              },
              "id": 900,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1263:10:3",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 904,
            "name": "ERROR_COMPLETE_TRANSITION",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "1280:81:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 902,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1280:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f434f4d504c4554455f5452414e534954494f4e",
              "id": 903,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1332:29:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_22ec6e0c3735a2fda2fb445836cfebb8537041a148155716f86965a81552ecaf",
                "typeString": "literal_string \"FINANCE_COMPLETE_TRANSITION\""
              },
              "value": "FINANCE_COMPLETE_TRANSITION"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 907,
            "name": "ERROR_NO_PAYMENT",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "1367:63:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 905,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1367:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f4e4f5f5041594d454e54",
              "id": 906,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1410:20:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_097ee68ce4c2babfac12a140bd18665f10bf8280cce5c7ff1e952d5f8cf29b31",
                "typeString": "literal_string \"FINANCE_NO_PAYMENT\""
              },
              "value": "FINANCE_NO_PAYMENT"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 910,
            "name": "ERROR_NO_TRANSACTION",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "1436:71:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 908,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1436:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f4e4f5f5452414e53414354494f4e",
              "id": 909,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1483:24:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_b1e87dfa63a7fa93fbf96eab40f01b7e057a0ce0eb12da8a36d7a9b3584faaea",
                "typeString": "literal_string \"FINANCE_NO_TRANSACTION\""
              },
              "value": "FINANCE_NO_TRANSACTION"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 913,
            "name": "ERROR_NO_PERIOD",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "1513:61:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 911,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1513:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f4e4f5f504552494f44",
              "id": 912,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1555:19:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_d1c462d5c2112fe4829843683286df794144b893d493bfb3a201b032dcb0798d",
                "typeString": "literal_string \"FINANCE_NO_PERIOD\""
              },
              "value": "FINANCE_NO_PERIOD"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 916,
            "name": "ERROR_VAULT_NOT_CONTRACT",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "1580:79:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 914,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1580:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f5641554c545f4e4f545f434f4e5452414354",
              "id": 915,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1631:28:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_4f6ce1beb4b1acc923ed553912415389acce4c55b09f8dc923ab624929c3ac7c",
                "typeString": "literal_string \"FINANCE_VAULT_NOT_CONTRACT\""
              },
              "value": "FINANCE_VAULT_NOT_CONTRACT"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 919,
            "name": "ERROR_INIT_PERIOD_TOO_SHORT",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "1665:85:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 917,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1665:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f494e49545f504552494f445f544f4f5f53484f5254",
              "id": 918,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1719:31:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_6c0b8b23c62f6e78082b7c3cd5e34af82e265c8bdab0d4fb552c9c00ab866e5b",
                "typeString": "literal_string \"FINANCE_INIT_PERIOD_TOO_SHORT\""
              },
              "value": "FINANCE_INIT_PERIOD_TOO_SHORT"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 922,
            "name": "ERROR_SET_PERIOD_TOO_SHORT",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "1756:83:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 920,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1756:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f5345545f504552494f445f544f4f5f53484f5254",
              "id": 921,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1809:30:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_d68defbc73c3fc3b3e56745e5b7eaa34c1c02c77f264f84307ede2a4bbf3aa49",
                "typeString": "literal_string \"FINANCE_SET_PERIOD_TOO_SHORT\""
              },
              "value": "FINANCE_SET_PERIOD_TOO_SHORT"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 925,
            "name": "ERROR_NEW_PAYMENT_AMOUNT_ZERO",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "1845:89:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 923,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1845:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f4e45575f5041594d454e545f414d4f554e545f5a45524f",
              "id": 924,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1901:33:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_77e3e6c5ab0615514c67af6bb792233c16dfdd95d1c126ef1d02c6fc997e658c",
                "typeString": "literal_string \"FINANCE_NEW_PAYMENT_AMOUNT_ZERO\""
              },
              "value": "FINANCE_NEW_PAYMENT_AMOUNT_ZERO"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 928,
            "name": "ERROR_RECOVER_AMOUNT_ZERO",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "1940:81:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 926,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1940:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f5245434f5645525f414d4f554e545f5a45524f",
              "id": 927,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1992:29:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_887cdae74ca676db86e5ff884d1ed487026a75a5ff2e355b97032d51731277ea",
                "typeString": "literal_string \"FINANCE_RECOVER_AMOUNT_ZERO\""
              },
              "value": "FINANCE_RECOVER_AMOUNT_ZERO"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 931,
            "name": "ERROR_DEPOSIT_AMOUNT_ZERO",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "2027:81:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 929,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2027:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f4445504f5349545f414d4f554e545f5a45524f",
              "id": 930,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2079:29:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_6610a3bc46bba63f677fa7f08e3ad8e90ebdf9830290f8fc7b863aca074b39e4",
                "typeString": "literal_string \"FINANCE_DEPOSIT_AMOUNT_ZERO\""
              },
              "value": "FINANCE_DEPOSIT_AMOUNT_ZERO"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 934,
            "name": "ERROR_BUDGET",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "2114:55:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 932,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2114:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f425544474554",
              "id": 933,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2153:16:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_a3b0fd663c3f091445c9d2b484685b6976e216ee84e292e1bc26c5f6eb18212d",
                "typeString": "literal_string \"FINANCE_BUDGET\""
              },
              "value": "FINANCE_BUDGET"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 937,
            "name": "ERROR_EXECUTE_PAYMENT_TIME",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "2175:83:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 935,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2175:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f455845435554455f5041594d454e545f54494d45",
              "id": 936,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2228:30:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_c1a736e94274378373cef5c66f5657bcfa50659c24581a0a4bfa668c04678317",
                "typeString": "literal_string \"FINANCE_EXECUTE_PAYMENT_TIME\""
              },
              "value": "FINANCE_EXECUTE_PAYMENT_TIME"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 940,
            "name": "ERROR_RECEIVER_EXECUTE_PAYMENT_TIME",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "2264:94:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 938,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2264:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f524356525f455845435f5041594d454e545f54494d45",
              "id": 939,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2326:32:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_610c5359845dd9df181d8e36774742a83b76dadea5e8ffea780a6d145dcf57a7",
                "typeString": "literal_string \"FINANCE_RCVR_EXEC_PAYMENT_TIME\""
              },
              "value": "FINANCE_RCVR_EXEC_PAYMENT_TIME"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 943,
            "name": "ERROR_PAYMENT_RECEIVER",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "2364:75:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 941,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2364:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f5041594d454e545f5245434549564552",
              "id": 942,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2413:26:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_e67182ceb919bc28f0bcb16889270f6f64025682424ceb6843d8119099dbeace",
                "typeString": "literal_string \"FINANCE_PAYMENT_RECEIVER\""
              },
              "value": "FINANCE_PAYMENT_RECEIVER"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 946,
            "name": "ERROR_TOKEN_TRANSFER_FROM_REVERTED",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "2445:95:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 944,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2445:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f544b4e5f5452414e534645525f46524f4d5f524556455254",
              "id": 945,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2506:34:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_dcfc1e5582a28e8a93ed58d8b479e8e1dc0c60309652fb2fd25bee148aa0e19b",
                "typeString": "literal_string \"FINANCE_TKN_TRANSFER_FROM_REVERT\""
              },
              "value": "FINANCE_TKN_TRANSFER_FROM_REVERT"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 949,
            "name": "ERROR_VALUE_MISMATCH",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "2546:71:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 947,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2546:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f56414c55455f4d49534d41544348",
              "id": 948,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2593:24:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_e77a6644fa5b5ed3e09b48074fb50f23962418beb9122c59e0121ea12123bda3",
                "typeString": "literal_string \"FINANCE_VALUE_MISMATCH\""
              },
              "value": "FINANCE_VALUE_MISMATCH"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 952,
            "name": "ERROR_PAYMENT_INACTIVE",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "2623:75:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 950,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2623:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f5041594d454e545f494e414354495645",
              "id": 951,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2672:26:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_fb1c85406dbe021dd2fbe569dc1b5134d310d7a785d47610fefcc3150d54bbd0",
                "typeString": "literal_string \"FINANCE_PAYMENT_INACTIVE\""
              },
              "value": "FINANCE_PAYMENT_INACTIVE"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 955,
            "name": "ERROR_REMAINING_BUDGET",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "2704:75:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 953,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2704:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f52454d41494e494e475f425544474554",
              "id": 954,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2753:26:3",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_2e378b1bab04e94af1aa86ea6fa9f5c8d9dee3ed82f1b4706d4b3e19e606de9c",
                "typeString": "literal_string \"FINANCE_REMAINING_BUDGET\""
              },
              "value": "FINANCE_REMAINING_BUDGET"
            },
            "visibility": "private"
          },
          {
            "canonicalName": "Finance.Payment",
            "id": 974,
            "members": [
              {
                "constant": false,
                "id": 957,
                "name": "token",
                "nodeType": "VariableDeclaration",
                "scope": 974,
                "src": "2846:13:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 956,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "2846:7:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 959,
                "name": "receiver",
                "nodeType": "VariableDeclaration",
                "scope": 974,
                "src": "2869:16:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 958,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "2869:7:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 961,
                "name": "createdBy",
                "nodeType": "VariableDeclaration",
                "scope": 974,
                "src": "2895:17:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 960,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "2895:7:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 963,
                "name": "inactive",
                "nodeType": "VariableDeclaration",
                "scope": 974,
                "src": "2922:13:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 962,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "2922:4:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 965,
                "name": "amount",
                "nodeType": "VariableDeclaration",
                "scope": 974,
                "src": "2945:14:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 964,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2945:7:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 967,
                "name": "initialPaymentTime",
                "nodeType": "VariableDeclaration",
                "scope": 974,
                "src": "2969:25:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 966,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "2969:6:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 969,
                "name": "interval",
                "nodeType": "VariableDeclaration",
                "scope": 974,
                "src": "3004:15:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 968,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3004:6:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 971,
                "name": "maxRepeats",
                "nodeType": "VariableDeclaration",
                "scope": 974,
                "src": "3029:17:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 970,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3029:6:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 973,
                "name": "repeats",
                "nodeType": "VariableDeclaration",
                "scope": 974,
                "src": "3056:14:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 972,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3056:6:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Payment",
            "nodeType": "StructDefinition",
            "scope": 2645,
            "src": "2821:256:3",
            "visibility": "public"
          },
          {
            "canonicalName": "Finance.Transaction",
            "id": 991,
            "members": [
              {
                "constant": false,
                "id": 976,
                "name": "token",
                "nodeType": "VariableDeclaration",
                "scope": 991,
                "src": "3147:13:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 975,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "3147:7:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 978,
                "name": "entity",
                "nodeType": "VariableDeclaration",
                "scope": 991,
                "src": "3170:14:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 977,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "3170:7:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 980,
                "name": "isIncoming",
                "nodeType": "VariableDeclaration",
                "scope": 991,
                "src": "3194:15:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 979,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "3194:4:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 982,
                "name": "amount",
                "nodeType": "VariableDeclaration",
                "scope": 991,
                "src": "3219:14:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 981,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3219:7:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 984,
                "name": "paymentId",
                "nodeType": "VariableDeclaration",
                "scope": 991,
                "src": "3243:17:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 983,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3243:7:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 986,
                "name": "paymentRepeatNumber",
                "nodeType": "VariableDeclaration",
                "scope": 991,
                "src": "3270:26:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 985,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3270:6:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 988,
                "name": "date",
                "nodeType": "VariableDeclaration",
                "scope": 991,
                "src": "3306:11:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 987,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3306:6:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 990,
                "name": "periodId",
                "nodeType": "VariableDeclaration",
                "scope": 991,
                "src": "3327:15:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 989,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3327:6:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Transaction",
            "nodeType": "StructDefinition",
            "scope": 2645,
            "src": "3118:231:3",
            "visibility": "public"
          },
          {
            "canonicalName": "Finance.TokenStatement",
            "id": 996,
            "members": [
              {
                "constant": false,
                "id": 993,
                "name": "expenses",
                "nodeType": "VariableDeclaration",
                "scope": 996,
                "src": "3387:16:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 992,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3387:7:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 995,
                "name": "income",
                "nodeType": "VariableDeclaration",
                "scope": 996,
                "src": "3413:14:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 994,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3413:7:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "TokenStatement",
            "nodeType": "StructDefinition",
            "scope": 2645,
            "src": "3355:79:3",
            "visibility": "public"
          },
          {
            "canonicalName": "Finance.Period",
            "id": 1009,
            "members": [
              {
                "constant": false,
                "id": 998,
                "name": "startTime",
                "nodeType": "VariableDeclaration",
                "scope": 1009,
                "src": "3464:16:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 997,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3464:6:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1000,
                "name": "endTime",
                "nodeType": "VariableDeclaration",
                "scope": 1009,
                "src": "3490:14:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 999,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3490:6:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1002,
                "name": "firstTransactionId",
                "nodeType": "VariableDeclaration",
                "scope": 1009,
                "src": "3514:26:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1001,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3514:7:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1004,
                "name": "lastTransactionId",
                "nodeType": "VariableDeclaration",
                "scope": 1009,
                "src": "3550:25:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1003,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3550:7:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1008,
                "name": "tokenStatement",
                "nodeType": "VariableDeclaration",
                "scope": 1009,
                "src": "3586:50:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TokenStatement_$996_storage_$",
                  "typeString": "mapping(address => struct Finance.TokenStatement)"
                },
                "typeName": {
                  "id": 1007,
                  "keyType": {
                    "id": 1005,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3595:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "3586:35:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TokenStatement_$996_storage_$",
                    "typeString": "mapping(address => struct Finance.TokenStatement)"
                  },
                  "valueType": {
                    "contractScope": null,
                    "id": 1006,
                    "name": "TokenStatement",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 996,
                    "src": "3606:14:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TokenStatement_$996_storage_ptr",
                      "typeString": "struct Finance.TokenStatement"
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Period",
            "nodeType": "StructDefinition",
            "scope": 2645,
            "src": "3440:203:3",
            "visibility": "public"
          },
          {
            "canonicalName": "Finance.Settings",
            "id": 1020,
            "members": [
              {
                "constant": false,
                "id": 1011,
                "name": "periodDuration",
                "nodeType": "VariableDeclaration",
                "scope": 1020,
                "src": "3675:21:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 1010,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3675:6:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1015,
                "name": "budgets",
                "nodeType": "VariableDeclaration",
                "scope": 1020,
                "src": "3706:36:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                  "typeString": "mapping(address => uint256)"
                },
                "typeName": {
                  "id": 1014,
                  "keyType": {
                    "id": 1012,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3715:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "3706:28:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "valueType": {
                    "id": 1013,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3726:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1019,
                "name": "hasBudget",
                "nodeType": "VariableDeclaration",
                "scope": 1020,
                "src": "3752:35:3",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                  "typeString": "mapping(address => bool)"
                },
                "typeName": {
                  "id": 1018,
                  "keyType": {
                    "id": 1016,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3761:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "3752:25:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                    "typeString": "mapping(address => bool)"
                  },
                  "valueType": {
                    "id": 1017,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3772:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Settings",
            "nodeType": "StructDefinition",
            "scope": 2645,
            "src": "3649:145:3",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1022,
            "name": "vault",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "3800:18:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Vault_$4917",
              "typeString": "contract Vault"
            },
            "typeName": {
              "contractScope": null,
              "id": 1021,
              "name": "Vault",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4917,
              "src": "3800:5:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Vault_$4917",
                "typeString": "contract Vault"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1024,
            "name": "settings",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "3824:26:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Settings_$1020_storage",
              "typeString": "struct Finance.Settings"
            },
            "typeName": {
              "contractScope": null,
              "id": 1023,
              "name": "Settings",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1020,
              "src": "3824:8:3",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Settings_$1020_storage_ptr",
                "typeString": "struct Finance.Settings"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 1028,
            "name": "payments",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "3946:46:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Payment_$974_storage_$",
              "typeString": "mapping(uint256 => struct Finance.Payment)"
            },
            "typeName": {
              "id": 1027,
              "keyType": {
                "id": 1025,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "3955:7:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "3946:28:3",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Payment_$974_storage_$",
                "typeString": "mapping(uint256 => struct Finance.Payment)"
              },
              "valueType": {
                "contractScope": null,
                "id": 1026,
                "name": "Payment",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 974,
                "src": "3966:7:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                  "typeString": "struct Finance.Payment"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 1030,
            "name": "paymentsNextIndex",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "4130:32:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 1029,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "4130:7:3",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1034,
            "name": "transactions",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "4169:54:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Transaction_$991_storage_$",
              "typeString": "mapping(uint256 => struct Finance.Transaction)"
            },
            "typeName": {
              "id": 1033,
              "keyType": {
                "id": 1031,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "4178:7:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "4169:32:3",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Transaction_$991_storage_$",
                "typeString": "mapping(uint256 => struct Finance.Transaction)"
              },
              "valueType": {
                "contractScope": null,
                "id": 1032,
                "name": "Transaction",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 991,
                "src": "4189:11:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                  "typeString": "struct Finance.Transaction"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 1036,
            "name": "transactionsNextIndex",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "4229:36:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 1035,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "4229:7:3",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1040,
            "name": "periods",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "4272:43:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$1009_storage_$",
              "typeString": "mapping(uint64 => struct Finance.Period)"
            },
            "typeName": {
              "id": 1039,
              "keyType": {
                "id": 1037,
                "name": "uint64",
                "nodeType": "ElementaryTypeName",
                "src": "4281:6:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                }
              },
              "nodeType": "Mapping",
              "src": "4272:26:3",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$1009_storage_$",
                "typeString": "mapping(uint64 => struct Finance.Period)"
              },
              "valueType": {
                "contractScope": null,
                "id": 1038,
                "name": "Period",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 1009,
                "src": "4291:6:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                  "typeString": "struct Finance.Period"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 1042,
            "name": "periodsLength",
            "nodeType": "VariableDeclaration",
            "scope": 2645,
            "src": "4321:27:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 1041,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "4321:6:3",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1050,
            "name": "NewPeriod",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1049,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1044,
                  "indexed": true,
                  "name": "periodId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1050,
                  "src": "4371:23:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1043,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "4371:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1046,
                  "indexed": false,
                  "name": "periodStarts",
                  "nodeType": "VariableDeclaration",
                  "scope": 1050,
                  "src": "4396:19:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1045,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "4396:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1048,
                  "indexed": false,
                  "name": "periodEnds",
                  "nodeType": "VariableDeclaration",
                  "scope": 1050,
                  "src": "4417:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1047,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "4417:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4370:65:3"
            },
            "src": "4355:81:3"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1058,
            "name": "SetBudget",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1057,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1052,
                  "indexed": true,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 1058,
                  "src": "4457:21:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1051,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4457:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1054,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1058,
                  "src": "4480:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1053,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4480:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1056,
                  "indexed": false,
                  "name": "hasBudget",
                  "nodeType": "VariableDeclaration",
                  "scope": 1058,
                  "src": "4496:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1055,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4496:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4456:55:3"
            },
            "src": "4441:71:3"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1068,
            "name": "NewPayment",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1067,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1060,
                  "indexed": true,
                  "name": "paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1068,
                  "src": "4534:25:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1059,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4534:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1062,
                  "indexed": true,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 1068,
                  "src": "4561:25:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1061,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4561:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1064,
                  "indexed": false,
                  "name": "maxRepeats",
                  "nodeType": "VariableDeclaration",
                  "scope": 1068,
                  "src": "4588:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1063,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "4588:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1066,
                  "indexed": false,
                  "name": "reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 1068,
                  "src": "4607:16:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1065,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "4607:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4533:91:3"
            },
            "src": "4517:108:3"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1080,
            "name": "NewTransaction",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1079,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1070,
                  "indexed": true,
                  "name": "transactionId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1080,
                  "src": "4651:29:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1069,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4651:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1072,
                  "indexed": false,
                  "name": "incoming",
                  "nodeType": "VariableDeclaration",
                  "scope": 1080,
                  "src": "4682:13:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1071,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4682:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1074,
                  "indexed": true,
                  "name": "entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 1080,
                  "src": "4697:22:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1073,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4697:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1076,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1080,
                  "src": "4721:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1075,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4721:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1078,
                  "indexed": false,
                  "name": "reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 1080,
                  "src": "4737:16:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1077,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "4737:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4650:104:3"
            },
            "src": "4630:125:3"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1086,
            "name": "ChangePaymentState",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1085,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1082,
                  "indexed": true,
                  "name": "paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1086,
                  "src": "4785:25:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1081,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4785:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1084,
                  "indexed": false,
                  "name": "inactive",
                  "nodeType": "VariableDeclaration",
                  "scope": 1086,
                  "src": "4812:13:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1083,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4812:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4784:42:3"
            },
            "src": "4760:67:3"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1090,
            "name": "ChangePeriodDuration",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1089,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1088,
                  "indexed": false,
                  "name": "newDuration",
                  "nodeType": "VariableDeclaration",
                  "scope": 1090,
                  "src": "4859:18:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1087,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "4859:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4858:20:3"
            },
            "src": "4832:47:3"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1094,
            "name": "PaymentFailure",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1093,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1092,
                  "indexed": false,
                  "name": "paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1094,
                  "src": "4905:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1091,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4905:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4904:19:3"
            },
            "src": "4884:40:3"
          },
          {
            "body": {
              "id": 1109,
              "nodeType": "Block",
              "src": "5168:175:3",
              "statements": [
                {
                  "assignments": [
                    1097
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1097,
                      "name": "completeTransition",
                      "nodeType": "VariableDeclaration",
                      "scope": 1110,
                      "src": "5178:23:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1096,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "5178:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1102,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1099,
                          "name": "getMaxPeriodTransitions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2644,
                          "src": "5235:23:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                            "typeString": "function () view returns (uint64)"
                          }
                        },
                        "id": 1100,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5235:25:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 1098,
                      "name": "_tryTransitionAccountingPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2557,
                      "src": "5204:30:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (uint256) returns (bool)"
                      }
                    },
                    "id": 1101,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5204:57:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5178:83:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1104,
                        "name": "completeTransition",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1097,
                        "src": "5279:18:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1105,
                        "name": "ERROR_COMPLETE_TRANSITION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 904,
                        "src": "5299:25:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1103,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "5271:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1106,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5271:54:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1107,
                  "nodeType": "ExpressionStatement",
                  "src": "5271:54:3"
                },
                {
                  "id": 1108,
                  "nodeType": "PlaceholderStatement",
                  "src": "5335:1:3"
                }
              ]
            },
            "documentation": null,
            "id": 1110,
            "name": "transitionsPeriod",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 1095,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5168:0:3"
            },
            "src": "5141:202:3",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1126,
              "nodeType": "Block",
              "src": "5392:103:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 1121,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1117,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1115,
                            "name": "_paymentId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1112,
                            "src": "5410:10:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1116,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5423:1:3",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "5410:14:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1120,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1118,
                            "name": "_paymentId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1112,
                            "src": "5428:10:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1119,
                            "name": "paymentsNextIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1030,
                            "src": "5441:17:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5428:30:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "5410:48:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1122,
                        "name": "ERROR_NO_PAYMENT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 907,
                        "src": "5460:16:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1114,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "5402:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1123,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5402:75:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1124,
                  "nodeType": "ExpressionStatement",
                  "src": "5402:75:3"
                },
                {
                  "id": 1125,
                  "nodeType": "PlaceholderStatement",
                  "src": "5487:1:3"
                }
              ]
            },
            "documentation": null,
            "id": 1127,
            "name": "paymentExists",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 1113,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1112,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1127,
                  "src": "5372:18:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1111,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5372:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5371:20:3"
            },
            "src": "5349:146:3",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1143,
              "nodeType": "Block",
              "src": "5552:119:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 1138,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1134,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1132,
                            "name": "_transactionId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1129,
                            "src": "5570:14:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1133,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5587:1:3",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "5570:18:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1137,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1135,
                            "name": "_transactionId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1129,
                            "src": "5592:14:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1136,
                            "name": "transactionsNextIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1036,
                            "src": "5609:21:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5592:38:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "5570:60:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1139,
                        "name": "ERROR_NO_TRANSACTION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 910,
                        "src": "5632:20:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1131,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "5562:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1140,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5562:91:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1141,
                  "nodeType": "ExpressionStatement",
                  "src": "5562:91:3"
                },
                {
                  "id": 1142,
                  "nodeType": "PlaceholderStatement",
                  "src": "5663:1:3"
                }
              ]
            },
            "documentation": null,
            "id": 1144,
            "name": "transactionExists",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 1130,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1129,
                  "name": "_transactionId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1144,
                  "src": "5528:22:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1128,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5528:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5527:24:3"
            },
            "src": "5501:170:3",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1156,
              "nodeType": "Block",
              "src": "5717:79:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 1151,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1149,
                          "name": "_periodId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1146,
                          "src": "5735:9:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1150,
                          "name": "periodsLength",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1042,
                          "src": "5747:13:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "5735:25:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1152,
                        "name": "ERROR_NO_PERIOD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 913,
                        "src": "5762:15:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1148,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "5727:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1153,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5727:51:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1154,
                  "nodeType": "ExpressionStatement",
                  "src": "5727:51:3"
                },
                {
                  "id": 1155,
                  "nodeType": "PlaceholderStatement",
                  "src": "5788:1:3"
                }
              ]
            },
            "documentation": null,
            "id": 1157,
            "name": "periodExists",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 1147,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1146,
                  "name": "_periodId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1157,
                  "src": "5699:16:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1145,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "5699:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5698:18:3"
            },
            "src": "5677:119:3",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1174,
              "nodeType": "Block",
              "src": "6035:162:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1165,
                        "name": "ETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8620,
                        "src": "6067:3:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1166,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12670,
                          "src": "6084:3:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1167,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6084:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4574686572207472616e7366657220746f2046696e616e636520617070",
                        "id": 1168,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6107:31:3",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b57949719489bee78e854a942ae31977cce66e975e0c81334ace426f675b89a8",
                          "typeString": "literal_string \"Ether transfer to Finance app\""
                        },
                        "value": "Ether transfer to Finance app"
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1169,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12670,
                          "src": "6152:3:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1170,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6152:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "74727565",
                        "id": 1171,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6176:4:3",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b57949719489bee78e854a942ae31977cce66e975e0c81334ace426f675b89a8",
                          "typeString": "literal_string \"Ether transfer to Finance app\""
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1164,
                      "name": "_deposit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2152,
                      "src": "6045:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_string_memory_ptr_$_t_address_$_t_bool_$returns$__$",
                        "typeString": "function (address,uint256,string memory,address,bool)"
                      }
                    },
                    "id": 1172,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6045:145:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1173,
                  "nodeType": "ExpressionStatement",
                  "src": "6045:145:3"
                }
              ]
            },
            "documentation": "@dev Sends ETH to Vault. Sends all the available balance.\n@notice Deposit ETH to the Vault, to avoid locking them in this Finance app forever",
            "id": 1175,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 1160,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1159,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8703,
                  "src": "6003:13:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6003:13:3"
              },
              {
                "arguments": null,
                "id": 1162,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1161,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1110,
                  "src": "6017:17:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6017:17:3"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1158,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5983:2:3"
            },
            "payable": true,
            "returnParameters": {
              "id": 1163,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6035:0:3"
            },
            "scope": 2645,
            "src": "5974:223:3",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1231,
              "nodeType": "Block",
              "src": "6552:633:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 1184,
                      "name": "initialized",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8746,
                      "src": "6562:11:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 1185,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6562:13:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1186,
                  "nodeType": "ExpressionStatement",
                  "src": "6562:13:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1189,
                            "name": "_vault",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1177,
                            "src": "6605:6:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Vault_$4917",
                              "typeString": "contract Vault"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Vault_$4917",
                              "typeString": "contract Vault"
                            }
                          ],
                          "id": 1188,
                          "name": "isContract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8788,
                          "src": "6594:10:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 1190,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6594:18:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1191,
                        "name": "ERROR_VAULT_NOT_CONTRACT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 916,
                        "src": "6614:24:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1187,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "6586:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1192,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6586:53:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1193,
                  "nodeType": "ExpressionStatement",
                  "src": "6586:53:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1196,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1194,
                      "name": "vault",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1022,
                      "src": "6649:5:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Vault_$4917",
                        "typeString": "contract Vault"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1195,
                      "name": "_vault",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1177,
                      "src": "6657:6:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Vault_$4917",
                        "typeString": "contract Vault"
                      }
                    },
                    "src": "6649:14:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Vault_$4917",
                      "typeString": "contract Vault"
                    }
                  },
                  "id": 1197,
                  "nodeType": "ExpressionStatement",
                  "src": "6649:14:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 1201,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1199,
                          "name": "_periodDuration",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1179,
                          "src": "6682:15:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 1200,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6701:6:3",
                          "subdenomination": "days",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_86400_by_1",
                            "typeString": "int_const 86400"
                          },
                          "value": "1"
                        },
                        "src": "6682:25:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1202,
                        "name": "ERROR_INIT_PERIOD_TOO_SHORT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 919,
                        "src": "6709:27:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1198,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "6674:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1203,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6674:63:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1204,
                  "nodeType": "ExpressionStatement",
                  "src": "6674:63:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1209,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1205,
                        "name": "settings",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1024,
                        "src": "6747:8:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Settings_$1020_storage",
                          "typeString": "struct Finance.Settings storage ref"
                        }
                      },
                      "id": 1207,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "periodDuration",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "6747:23:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1208,
                      "name": "_periodDuration",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1179,
                      "src": "6773:15:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "6747:41:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1210,
                  "nodeType": "ExpressionStatement",
                  "src": "6747:41:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1216,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1211,
                          "name": "payments",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1028,
                          "src": "6912:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Payment_$974_storage_$",
                            "typeString": "mapping(uint256 => struct Finance.Payment storage ref)"
                          }
                        },
                        "id": 1213,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1212,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6921:1:3",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "6912:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage",
                          "typeString": "struct Finance.Payment storage ref"
                        }
                      },
                      "id": 1214,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "inactive",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 963,
                      "src": "6912:20:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 1215,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6935:4:3",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "6912:27:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1217,
                  "nodeType": "ExpressionStatement",
                  "src": "6912:27:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1220,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1218,
                      "name": "paymentsNextIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1030,
                      "src": "6949:17:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 1219,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6969:1:3",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "6949:21:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1221,
                  "nodeType": "ExpressionStatement",
                  "src": "6949:21:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1224,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1222,
                      "name": "transactionsNextIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1036,
                      "src": "7080:21:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 1223,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7104:1:3",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "7080:25:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1225,
                  "nodeType": "ExpressionStatement",
                  "src": "7080:25:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1227,
                          "name": "getTimestamp64",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8868,
                          "src": "7161:14:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                            "typeString": "function () view returns (uint64)"
                          }
                        },
                        "id": 1228,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7161:16:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 1226,
                      "name": "_newPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2211,
                      "src": "7150:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint64_$returns$_t_struct$_Period_$1009_storage_ptr_$",
                        "typeString": "function (uint64) returns (struct Finance.Period storage pointer)"
                      }
                    },
                    "id": 1229,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7150:28:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                      "typeString": "struct Finance.Period storage pointer"
                    }
                  },
                  "id": 1230,
                  "nodeType": "ExpressionStatement",
                  "src": "7150:28:3"
                }
              ]
            },
            "documentation": "@notice Initialize Finance app for Vault at `_vault` with period length of `@transformTime(_periodDuration)`\n@param _vault Address of the vault Finance will rely on (non changeable)\n@param _periodDuration Duration in seconds of each period",
            "id": 1232,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 1182,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1181,
                  "name": "onlyInit",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8693,
                  "src": "6543:8:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6543:8:3"
              }
            ],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1180,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1177,
                  "name": "_vault",
                  "nodeType": "VariableDeclaration",
                  "scope": 1232,
                  "src": "6496:12:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Vault_$4917",
                    "typeString": "contract Vault"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1176,
                    "name": "Vault",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4917,
                    "src": "6496:5:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Vault_$4917",
                      "typeString": "contract Vault"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1179,
                  "name": "_periodDuration",
                  "nodeType": "VariableDeclaration",
                  "scope": 1232,
                  "src": "6510:22:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1178,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "6510:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6495:38:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1183,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6552:0:3"
            },
            "scope": 2645,
            "src": "6476:709:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1254,
              "nodeType": "Block",
              "src": "7563:142:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1246,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1234,
                        "src": "7595:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1247,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1236,
                        "src": "7615:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1248,
                        "name": "_reference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1238,
                        "src": "7636:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1249,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12670,
                          "src": "7660:3:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1250,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "7660:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "74727565",
                        "id": 1251,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7684:4:3",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1245,
                      "name": "_deposit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2152,
                      "src": "7573:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_string_memory_ptr_$_t_address_$_t_bool_$returns$__$",
                        "typeString": "function (address,uint256,string memory,address,bool)"
                      }
                    },
                    "id": 1252,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7573:125:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1253,
                  "nodeType": "ExpressionStatement",
                  "src": "7573:125:3"
                }
              ]
            },
            "documentation": "@dev Deposit for approved ERC20 tokens or ETH\n@notice Deposit `@tokenAmount(_token, _amount)`\n@param _token Address of deposited token\n@param _amount Amount of tokens sent\n@param _reference Reason for payment",
            "id": 1255,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 1241,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1240,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8703,
                  "src": "7531:13:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7531:13:3"
              },
              {
                "arguments": null,
                "id": 1243,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1242,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1110,
                  "src": "7545:17:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7545:17:3"
              }
            ],
            "name": "deposit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1239,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1234,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 1255,
                  "src": "7462:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1233,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7462:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1236,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1255,
                  "src": "7478:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1235,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7478:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1238,
                  "name": "_reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 1255,
                  "src": "7495:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1237,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "7495:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7461:52:3"
            },
            "payable": true,
            "returnParameters": {
              "id": 1244,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7563:0:3"
            },
            "scope": 2645,
            "src": "7445:260:3",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1402,
              "nodeType": "Block",
              "src": "8785:1303:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1289,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1287,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1261,
                          "src": "8803:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1288,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8813:1:3",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "8803:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1290,
                        "name": "ERROR_NEW_PAYMENT_AMOUNT_ZERO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 925,
                        "src": "8816:29:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1286,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "8795:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1291,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8795:51:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1292,
                  "nodeType": "ExpressionStatement",
                  "src": "8795:51:3"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 1300,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "id": 1296,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1293,
                        "name": "_initialPaymentTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1263,
                        "src": "8928:19:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1294,
                          "name": "getTimestamp64",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8868,
                          "src": "8951:14:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                            "typeString": "function () view returns (uint64)"
                          }
                        },
                        "id": 1295,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8951:16:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "src": "8928:39:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "id": 1299,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1297,
                        "name": "_maxRepeats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1267,
                        "src": "8971:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 1298,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8986:1:3",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "8971:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "8928:59:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1312,
                  "nodeType": "IfStatement",
                  "src": "8924:392:3",
                  "trueBody": {
                    "id": 1311,
                    "nodeType": "Block",
                    "src": "8989:327:3",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1302,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1257,
                              "src": "9044:6:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1303,
                              "name": "_receiver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1259,
                              "src": "9068:9:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1304,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1261,
                              "src": "9095:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1305,
                              "name": "NO_PAYMENT",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 883,
                              "src": "9120:10:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1306,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9199:1:3",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "argumentTypes": null,
                              "id": 1307,
                              "name": "_reference",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1269,
                              "src": "9261:10:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_calldata_ptr",
                                "typeString": "string calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_string_calldata_ptr",
                                "typeString": "string calldata"
                              }
                            ],
                            "id": 1301,
                            "name": "_makePaymentTransaction",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2326,
                            "src": "9003:23:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint64_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256,uint64,string memory)"
                            }
                          },
                          "id": 1308,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9003:282:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1309,
                        "nodeType": "ExpressionStatement",
                        "src": "9003:282:3"
                      },
                      {
                        "expression": null,
                        "functionReturnParameters": 1285,
                        "id": 1310,
                        "nodeType": "Return",
                        "src": "9299:7:3"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 1325,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1319,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1314,
                                "name": "settings",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1024,
                                "src": "9435:8:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Settings_$1020_storage",
                                  "typeString": "struct Finance.Settings storage ref"
                                }
                              },
                              "id": 1315,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "budgets",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1015,
                              "src": "9435:16:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1317,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1316,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1257,
                              "src": "9452:6:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9435:24:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1318,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1261,
                            "src": "9463:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9435:35:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1324,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "9474:27:3",
                          "subExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1320,
                                "name": "settings",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1024,
                                "src": "9475:8:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Settings_$1020_storage",
                                  "typeString": "struct Finance.Settings storage ref"
                                }
                              },
                              "id": 1321,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "hasBudget",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1019,
                              "src": "9475:18:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 1323,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1322,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1257,
                              "src": "9494:6:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9475:26:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "9435:66:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1326,
                        "name": "ERROR_BUDGET",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 934,
                        "src": "9503:12:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1313,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "9427:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1327,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9427:89:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1328,
                  "nodeType": "ExpressionStatement",
                  "src": "9427:89:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1332,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1329,
                      "name": "paymentId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1284,
                      "src": "9527:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1331,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "9539:19:3",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 1330,
                        "name": "paymentsNextIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1030,
                        "src": "9539:17:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9527:31:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1333,
                  "nodeType": "ExpressionStatement",
                  "src": "9527:31:3"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1335,
                        "name": "paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1284,
                        "src": "9584:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1336,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1259,
                        "src": "9595:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1337,
                        "name": "_maxRepeats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1267,
                        "src": "9606:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1338,
                        "name": "_reference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1269,
                        "src": "9619:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      ],
                      "id": 1334,
                      "name": "NewPayment",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1068,
                      "src": "9573:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_uint64_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (uint256,address,uint64,string memory)"
                      }
                    },
                    "id": 1339,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9573:57:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1340,
                  "nodeType": "EmitStatement",
                  "src": "9568:62:3"
                },
                {
                  "assignments": [
                    1342
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1342,
                      "name": "payment",
                      "nodeType": "VariableDeclaration",
                      "scope": 1403,
                      "src": "9641:23:3",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                        "typeString": "struct Finance.Payment"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1341,
                        "name": "Payment",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 974,
                        "src": "9641:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1346,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1343,
                      "name": "payments",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1028,
                      "src": "9667:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Payment_$974_storage_$",
                        "typeString": "mapping(uint256 => struct Finance.Payment storage ref)"
                      }
                    },
                    "id": 1345,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1344,
                      "name": "paymentId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1284,
                      "src": "9676:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "9667:19:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Payment_$974_storage",
                      "typeString": "struct Finance.Payment storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9641:45:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1351,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1347,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1342,
                        "src": "9696:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment storage pointer"
                        }
                      },
                      "id": 1349,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "token",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 957,
                      "src": "9696:13:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1350,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1257,
                      "src": "9712:6:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "9696:22:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1352,
                  "nodeType": "ExpressionStatement",
                  "src": "9696:22:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1357,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1353,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1342,
                        "src": "9728:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment storage pointer"
                        }
                      },
                      "id": 1355,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "receiver",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 959,
                      "src": "9728:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1356,
                      "name": "_receiver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1259,
                      "src": "9747:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "9728:28:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1358,
                  "nodeType": "ExpressionStatement",
                  "src": "9728:28:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1363,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1359,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1342,
                        "src": "9766:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment storage pointer"
                        }
                      },
                      "id": 1361,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 965,
                      "src": "9766:14:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1362,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1261,
                      "src": "9783:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9766:24:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1364,
                  "nodeType": "ExpressionStatement",
                  "src": "9766:24:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1369,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1365,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1342,
                        "src": "9800:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment storage pointer"
                        }
                      },
                      "id": 1367,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "initialPaymentTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 967,
                      "src": "9800:26:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1368,
                      "name": "_initialPaymentTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1263,
                      "src": "9829:19:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "9800:48:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1370,
                  "nodeType": "ExpressionStatement",
                  "src": "9800:48:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1375,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1371,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1342,
                        "src": "9858:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment storage pointer"
                        }
                      },
                      "id": 1373,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "interval",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 969,
                      "src": "9858:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1374,
                      "name": "_interval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1265,
                      "src": "9877:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "9858:28:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1376,
                  "nodeType": "ExpressionStatement",
                  "src": "9858:28:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1381,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1377,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1342,
                        "src": "9896:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment storage pointer"
                        }
                      },
                      "id": 1379,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "maxRepeats",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 971,
                      "src": "9896:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1380,
                      "name": "_maxRepeats",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1267,
                      "src": "9917:11:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "9896:32:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1382,
                  "nodeType": "ExpressionStatement",
                  "src": "9896:32:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1388,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1383,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1342,
                        "src": "9938:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment storage pointer"
                        }
                      },
                      "id": 1385,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "createdBy",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 961,
                      "src": "9938:17:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1386,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12670,
                        "src": "9958:3:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 1387,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "9958:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "9938:30:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1389,
                  "nodeType": "ExpressionStatement",
                  "src": "9938:30:3"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 1395,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1391,
                          "name": "paymentId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1284,
                          "src": "9999:9:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1390,
                        "name": "nextPaymentTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2004,
                        "src": "9983:15:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint64_$",
                          "typeString": "function (uint256) view returns (uint64)"
                        }
                      },
                      "id": 1392,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9983:26:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 1393,
                        "name": "getTimestamp64",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8868,
                        "src": "10013:14:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                          "typeString": "function () view returns (uint64)"
                        }
                      },
                      "id": 1394,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10013:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "9983:46:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1401,
                  "nodeType": "IfStatement",
                  "src": "9979:103:3",
                  "trueBody": {
                    "id": 1400,
                    "nodeType": "Block",
                    "src": "10031:51:3",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1397,
                              "name": "paymentId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1284,
                              "src": "10061:9:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1396,
                            "name": "_executePayment",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2283,
                            "src": "10045:15:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 1398,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10045:26:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1399,
                        "nodeType": "ExpressionStatement",
                        "src": "10045:26:3"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@notice Create a new payment of `@tokenAmount(_token, _amount)` to `_receiver``_maxRepeats > 0 ? ', executing ' + _maxRepeats + ' times at intervals of ' + @transformTime(_interval) : ''`\n@param _token Address of token for payment\n@param _receiver Address that will receive payment\n@param _amount Tokens that are payed every time the payment is due\n@param _initialPaymentTime Timestamp for when the first payment is done\n@param _interval Number of seconds that need to pass between payment transactions\n@param _maxRepeats Maximum instances a payment can be executed\n@param _reference String detailing payment reason",
            "id": 1403,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1272,
                    "name": "CREATE_PAYMENTS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 860,
                    "src": "8640:20:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1274,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1257,
                        "src": "8666:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1275,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1259,
                        "src": "8674:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1276,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1261,
                        "src": "8685:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1277,
                        "name": "_interval",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1265,
                        "src": "8694:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1278,
                        "name": "_maxRepeats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1267,
                        "src": "8705:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 1273,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7175,
                        7190,
                        7210,
                        7225,
                        7245,
                        7266,
                        7290,
                        7310,
                        7339,
                        7364,
                        7389,
                        7412,
                        7443,
                        7482,
                        7529,
                        7584
                      ],
                      "referencedDeclaration": 7339,
                      "src": "8662:3:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (address,address,uint256,uint256,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 1279,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8662:55:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 1280,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1271,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8406,
                  "src": "8634:5:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8634:84:3"
              },
              {
                "arguments": null,
                "id": 1282,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1281,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1110,
                  "src": "8727:17:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8727:17:3"
              }
            ],
            "name": "newPayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1270,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1257,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 1403,
                  "src": "8419:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1256,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8419:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1259,
                  "name": "_receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 1403,
                  "src": "8443:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1258,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8443:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1261,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1403,
                  "src": "8470:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1260,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8470:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1263,
                  "name": "_initialPaymentTime",
                  "nodeType": "VariableDeclaration",
                  "scope": 1403,
                  "src": "8495:26:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1262,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "8495:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1265,
                  "name": "_interval",
                  "nodeType": "VariableDeclaration",
                  "scope": 1403,
                  "src": "8531:16:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1264,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "8531:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1267,
                  "name": "_maxRepeats",
                  "nodeType": "VariableDeclaration",
                  "scope": 1403,
                  "src": "8557:18:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1266,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "8557:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1269,
                  "name": "_reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 1403,
                  "src": "8585:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1268,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "8585:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8409:199:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1285,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1284,
                  "name": "paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1403,
                  "src": "8762:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1283,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8762:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8761:19:3"
            },
            "scope": 2645,
            "src": "8390:1698:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1439,
              "nodeType": "Block",
              "src": "10490:182:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 1425,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1423,
                          "name": "_periodDuration",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1405,
                          "src": "10508:15:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 1424,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10527:6:3",
                          "subdenomination": "days",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_86400_by_1",
                            "typeString": "int_const 86400"
                          },
                          "value": "1"
                        },
                        "src": "10508:25:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1426,
                        "name": "ERROR_SET_PERIOD_TOO_SHORT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 922,
                        "src": "10535:26:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1422,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "10500:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1427,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10500:62:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1428,
                  "nodeType": "ExpressionStatement",
                  "src": "10500:62:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1433,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1429,
                        "name": "settings",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1024,
                        "src": "10572:8:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Settings_$1020_storage",
                          "typeString": "struct Finance.Settings storage ref"
                        }
                      },
                      "id": 1431,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "periodDuration",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "10572:23:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1432,
                      "name": "_periodDuration",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1405,
                      "src": "10598:15:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "10572:41:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1434,
                  "nodeType": "ExpressionStatement",
                  "src": "10572:41:3"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1436,
                        "name": "_periodDuration",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1405,
                        "src": "10649:15:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 1435,
                      "name": "ChangePeriodDuration",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1090,
                      "src": "10628:20:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint64_$returns$__$",
                        "typeString": "function (uint64)"
                      }
                    },
                    "id": 1437,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10628:37:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1438,
                  "nodeType": "EmitStatement",
                  "src": "10623:42:3"
                }
              ]
            },
            "documentation": "@notice Change period duration to `@transformTime(_periodDuration)`, effective for next accounting period\n@param _periodDuration Duration in seconds for accounting periods",
            "id": 1440,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1408,
                    "name": "CHANGE_PERIOD_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 865,
                    "src": "10375:18:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1411,
                            "name": "_periodDuration",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1405,
                            "src": "10407:15:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          ],
                          "id": 1410,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "10399:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 1412,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10399:24:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1414,
                              "name": "settings",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1024,
                              "src": "10433:8:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Settings_$1020_storage",
                                "typeString": "struct Finance.Settings storage ref"
                              }
                            },
                            "id": 1415,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "periodDuration",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1011,
                            "src": "10433:23:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          ],
                          "id": 1413,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "10425:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 1416,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10425:32:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1409,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7175,
                        7190,
                        7210,
                        7225,
                        7245,
                        7266,
                        7290,
                        7310,
                        7339,
                        7364,
                        7389,
                        7412,
                        7443,
                        7482,
                        7529,
                        7584
                      ],
                      "referencedDeclaration": 7443,
                      "src": "10395:3:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 1417,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10395:63:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 1418,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1407,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8406,
                  "src": "10369:5:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10369:90:3"
              },
              {
                "arguments": null,
                "id": 1420,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1419,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1110,
                  "src": "10468:17:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10468:17:3"
              }
            ],
            "name": "setPeriodDuration",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1406,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1405,
                  "name": "_periodDuration",
                  "nodeType": "VariableDeclaration",
                  "scope": 1440,
                  "src": "10320:22:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1404,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "10320:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10319:24:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1421,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10490:0:3"
            },
            "scope": 2645,
            "src": "10293:379:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1496,
              "nodeType": "Block",
              "src": "11130:198:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1473,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1467,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1024,
                          "src": "11140:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$1020_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 1470,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "budgets",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1015,
                        "src": "11140:16:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1471,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 1469,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1442,
                        "src": "11157:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "11140:24:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1472,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1444,
                      "src": "11167:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11140:34:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1474,
                  "nodeType": "ExpressionStatement",
                  "src": "11140:34:3"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 1479,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "11188:27:3",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1475,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1024,
                          "src": "11189:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$1020_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 1476,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hasBudget",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1019,
                        "src": "11189:18:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 1478,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 1477,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1442,
                        "src": "11208:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "11189:26:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1489,
                  "nodeType": "IfStatement",
                  "src": "11184:91:3",
                  "trueBody": {
                    "id": 1488,
                    "nodeType": "Block",
                    "src": "11217:58:3",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1486,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1480,
                                "name": "settings",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1024,
                                "src": "11231:8:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Settings_$1020_storage",
                                  "typeString": "struct Finance.Settings storage ref"
                                }
                              },
                              "id": 1483,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "hasBudget",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1019,
                              "src": "11231:18:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 1484,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1482,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1442,
                              "src": "11250:6:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "11231:26:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "74727565",
                            "id": 1485,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11260:4:3",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "11231:33:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1487,
                        "nodeType": "ExpressionStatement",
                        "src": "11231:33:3"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1491,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1442,
                        "src": "11299:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1492,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1444,
                        "src": "11307:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "74727565",
                        "id": 1493,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11316:4:3",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1490,
                      "name": "SetBudget",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1058,
                      "src": "11289:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (address,uint256,bool)"
                      }
                    },
                    "id": 1494,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11289:32:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1495,
                  "nodeType": "EmitStatement",
                  "src": "11284:37:3"
                }
              ]
            },
            "documentation": "@notice Set budget for `_token.symbol(): string` to `@tokenAmount(_token, _amount, false)`, effective immediately\n@param _token Address for token\n@param _amount New budget amount",
            "id": 1497,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1447,
                    "name": "CHANGE_BUDGETS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 870,
                    "src": "10995:19:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1449,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1442,
                        "src": "11020:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1450,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1444,
                        "src": "11028:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1451,
                            "name": "settings",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1024,
                            "src": "11037:8:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Settings_$1020_storage",
                              "typeString": "struct Finance.Settings storage ref"
                            }
                          },
                          "id": 1452,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "budgets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1015,
                          "src": "11037:16:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                          }
                        },
                        "id": 1454,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1453,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1442,
                          "src": "11054:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "11037:24:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "condition": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1455,
                              "name": "settings",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1024,
                              "src": "11063:8:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Settings_$1020_storage",
                                "typeString": "struct Finance.Settings storage ref"
                              }
                            },
                            "id": 1456,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "hasBudget",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1019,
                            "src": "11063:18:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 1458,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1457,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1442,
                            "src": "11082:6:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "11063:26:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1460,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11096:1:3",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "id": 1461,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "Conditional",
                        "src": "11063:34:3",
                        "trueExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 1459,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11092:1:3",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      ],
                      "id": 1448,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7175,
                        7190,
                        7210,
                        7225,
                        7245,
                        7266,
                        7290,
                        7310,
                        7339,
                        7364,
                        7389,
                        7412,
                        7443,
                        7482,
                        7529,
                        7584
                      ],
                      "referencedDeclaration": 7290,
                      "src": "11016:3:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (address,uint256,uint256,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 1462,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11016:82:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 1463,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1446,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8406,
                  "src": "10989:5:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10989:110:3"
              },
              {
                "arguments": null,
                "id": 1465,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1464,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1110,
                  "src": "11108:17:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11108:17:3"
              }
            ],
            "name": "setBudget",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1445,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1442,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 1497,
                  "src": "10918:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1441,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10918:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1444,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1497,
                  "src": "10942:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1443,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10942:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10908:55:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1466,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11130:0:3"
            },
            "scope": 2645,
            "src": "10890:438:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1546,
              "nodeType": "Block",
              "src": "11683:131:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1530,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1524,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1024,
                          "src": "11693:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$1020_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 1527,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "budgets",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1015,
                        "src": "11693:16:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1528,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 1526,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1499,
                        "src": "11710:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "11693:24:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1529,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11720:1:3",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "11693:28:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1531,
                  "nodeType": "ExpressionStatement",
                  "src": "11693:28:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1538,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1532,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1024,
                          "src": "11731:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$1020_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 1535,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hasBudget",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1019,
                        "src": "11731:18:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 1536,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 1534,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1499,
                        "src": "11750:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "11731:26:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 1537,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11760:5:3",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "11731:34:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1539,
                  "nodeType": "ExpressionStatement",
                  "src": "11731:34:3"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1541,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1499,
                        "src": "11790:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 1542,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11798:1:3",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 1543,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11801:5:3",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1540,
                      "name": "SetBudget",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1058,
                      "src": "11780:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (address,uint256,bool)"
                      }
                    },
                    "id": 1544,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11780:27:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1545,
                  "nodeType": "EmitStatement",
                  "src": "11775:32:3"
                }
              ]
            },
            "documentation": "@notice Remove spending limit for `_token.symbol(): string`, effective immediately\n@param _token Address for token",
            "id": 1547,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1502,
                    "name": "CHANGE_BUDGETS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 870,
                    "src": "11545:19:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1504,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1499,
                        "src": "11570:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1506,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11586:1:3",
                            "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": 1505,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "11578:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 1507,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11578:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1508,
                            "name": "settings",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1024,
                            "src": "11590:8:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Settings_$1020_storage",
                              "typeString": "struct Finance.Settings storage ref"
                            }
                          },
                          "id": 1509,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "budgets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1015,
                          "src": "11590:16:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                          }
                        },
                        "id": 1511,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1510,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1499,
                          "src": "11607:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "11590:24:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "condition": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1512,
                              "name": "settings",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1024,
                              "src": "11616:8:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Settings_$1020_storage",
                                "typeString": "struct Finance.Settings storage ref"
                              }
                            },
                            "id": 1513,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "hasBudget",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1019,
                            "src": "11616:18:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 1515,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1514,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1499,
                            "src": "11635:6:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "11616:26:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1517,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11649:1:3",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "id": 1518,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "Conditional",
                        "src": "11616:34:3",
                        "trueExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 1516,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11645:1:3",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      ],
                      "id": 1503,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7175,
                        7190,
                        7210,
                        7225,
                        7245,
                        7266,
                        7290,
                        7310,
                        7339,
                        7364,
                        7389,
                        7412,
                        7443,
                        7482,
                        7529,
                        7584
                      ],
                      "referencedDeclaration": 7290,
                      "src": "11566:3:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (address,uint256,uint256,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 1519,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11566:85:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 1520,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1501,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8406,
                  "src": "11539:5:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11539:113:3"
              },
              {
                "arguments": null,
                "id": 1522,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1521,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1110,
                  "src": "11661:17:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11661:17:3"
              }
            ],
            "name": "removeBudget",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1500,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1499,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 1547,
                  "src": "11498:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1498,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11498:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11497:16:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1523,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11683:0:3"
            },
            "scope": 2645,
            "src": "11476:338:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1581,
              "nodeType": "Block",
              "src": "12190:139:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 1573,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1569,
                              "name": "_paymentId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1549,
                              "src": "12224:10:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1568,
                            "name": "nextPaymentTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2004,
                            "src": "12208:15:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint64_$",
                              "typeString": "function (uint256) view returns (uint64)"
                            }
                          },
                          "id": 1570,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12208:27:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1571,
                            "name": "getTimestamp64",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8868,
                            "src": "12239:14:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                              "typeString": "function () view returns (uint64)"
                            }
                          },
                          "id": 1572,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12239:16:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "12208:47:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1574,
                        "name": "ERROR_EXECUTE_PAYMENT_TIME",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 937,
                        "src": "12257:26:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1567,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "12200:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1575,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12200:84:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1576,
                  "nodeType": "ExpressionStatement",
                  "src": "12200:84:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1578,
                        "name": "_paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1549,
                        "src": "12311:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1577,
                      "name": "_executePayment",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2283,
                      "src": "12295:15:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 1579,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12295:27:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1580,
                  "nodeType": "ExpressionStatement",
                  "src": "12295:27:3"
                }
              ]
            },
            "documentation": "@dev Executes any payment (requires role)\n@notice Execute pending payment #`_paymentId`\n@param _paymentId Identifier for payment",
            "id": 1582,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1552,
                    "name": "EXECUTE_PAYMENTS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 875,
                    "src": "12057:21:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1554,
                        "name": "_paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1549,
                        "src": "12084:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1555,
                            "name": "payments",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1028,
                            "src": "12096:8:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Payment_$974_storage_$",
                              "typeString": "mapping(uint256 => struct Finance.Payment storage ref)"
                            }
                          },
                          "id": 1557,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1556,
                            "name": "_paymentId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1549,
                            "src": "12105:10:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "12096:20:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Payment_$974_storage",
                            "typeString": "struct Finance.Payment storage ref"
                          }
                        },
                        "id": 1558,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "amount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 965,
                        "src": "12096:27:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1553,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7175,
                        7190,
                        7210,
                        7225,
                        7245,
                        7266,
                        7290,
                        7310,
                        7339,
                        7364,
                        7389,
                        7412,
                        7443,
                        7482,
                        7529,
                        7584
                      ],
                      "referencedDeclaration": 7443,
                      "src": "12080:3:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 1559,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12080:44:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 1560,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1551,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8406,
                  "src": "12051:5:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12051:74:3"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1562,
                    "name": "_paymentId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1549,
                    "src": "12148:10:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 1563,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1561,
                  "name": "paymentExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1127,
                  "src": "12134:13:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12134:25:3"
              },
              {
                "arguments": null,
                "id": 1565,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1564,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1110,
                  "src": "12168:17:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12168:17:3"
              }
            ],
            "name": "executePayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1550,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1549,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1582,
                  "src": "12006:18:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1548,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12006:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12005:20:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1566,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12190:0:3"
            },
            "scope": 2645,
            "src": "11982:347:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1619,
              "nodeType": "Block",
              "src": "12636:234:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 1600,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1596,
                              "name": "_paymentId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1584,
                              "src": "12670:10:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1595,
                            "name": "nextPaymentTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2004,
                            "src": "12654:15:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint64_$",
                              "typeString": "function (uint256) view returns (uint64)"
                            }
                          },
                          "id": 1597,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12654:27:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1598,
                            "name": "getTimestamp64",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8868,
                            "src": "12685:14:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                              "typeString": "function () view returns (uint64)"
                            }
                          },
                          "id": 1599,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12685:16:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "12654:47:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1601,
                        "name": "ERROR_RECEIVER_EXECUTE_PAYMENT_TIME",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 940,
                        "src": "12703:35:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1594,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "12646:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1602,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12646:93:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1603,
                  "nodeType": "ExpressionStatement",
                  "src": "12646:93:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1611,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1605,
                              "name": "payments",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1028,
                              "src": "12757:8:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Payment_$974_storage_$",
                                "typeString": "mapping(uint256 => struct Finance.Payment storage ref)"
                              }
                            },
                            "id": 1607,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1606,
                              "name": "_paymentId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1584,
                              "src": "12766:10:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "12757:20:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Payment_$974_storage",
                              "typeString": "struct Finance.Payment storage ref"
                            }
                          },
                          "id": 1608,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "receiver",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 959,
                          "src": "12757:29:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1609,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12670,
                            "src": "12790:3:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1610,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "12790:10:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "12757:43:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1612,
                        "name": "ERROR_PAYMENT_RECEIVER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 943,
                        "src": "12802:22:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1604,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "12749:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1613,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12749:76:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1614,
                  "nodeType": "ExpressionStatement",
                  "src": "12749:76:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1616,
                        "name": "_paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1584,
                        "src": "12852:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1615,
                      "name": "_executePayment",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2283,
                      "src": "12836:15:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 1617,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12836:27:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1618,
                  "nodeType": "ExpressionStatement",
                  "src": "12836:27:3"
                }
              ]
            },
            "documentation": "@dev Always allows receiver of a payment to trigger execution\n@notice Execute pending payment #`_paymentId`\n@param _paymentId Identifier for payment",
            "id": 1620,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 1587,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1586,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8703,
                  "src": "12578:13:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12578:13:3"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1589,
                    "name": "_paymentId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1584,
                    "src": "12606:10:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 1590,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1588,
                  "name": "paymentExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1127,
                  "src": "12592:13:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12592:25:3"
              },
              {
                "arguments": null,
                "id": 1592,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1591,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1110,
                  "src": "12618:17:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12618:17:3"
              }
            ],
            "name": "receiverExecutePayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1585,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1584,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1620,
                  "src": "12549:18:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1583,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12549:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12548:20:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1593,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12636:0:3"
            },
            "scope": 2645,
            "src": "12517:353:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1655,
              "nodeType": "Block",
              "src": "13558:111:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1648,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1642,
                          "name": "payments",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1028,
                          "src": "13568:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Payment_$974_storage_$",
                            "typeString": "mapping(uint256 => struct Finance.Payment storage ref)"
                          }
                        },
                        "id": 1644,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1643,
                          "name": "_paymentId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1622,
                          "src": "13577:10:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "13568:20:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage",
                          "typeString": "struct Finance.Payment storage ref"
                        }
                      },
                      "id": 1645,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "inactive",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 963,
                      "src": "13568:29:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1647,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "13600:8:3",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 1646,
                        "name": "_active",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1624,
                        "src": "13601:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "13568:40:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1649,
                  "nodeType": "ExpressionStatement",
                  "src": "13568:40:3"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1651,
                        "name": "_paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1622,
                        "src": "13642:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1652,
                        "name": "_active",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1624,
                        "src": "13654:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1650,
                      "name": "ChangePaymentState",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1086,
                      "src": "13623:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (uint256,bool)"
                      }
                    },
                    "id": 1653,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13623:39:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1654,
                  "nodeType": "EmitStatement",
                  "src": "13618:44:3"
                }
              ]
            },
            "documentation": "@notice `_active ? 'Activate' : 'Disable'` payment #`_paymentId`\n@dev Note that we do not require this action to transition periods, as it doesn't directly\n     impact any accounting periods.\n     Not having to transition periods also makes disabling payments easier to prevent funds\n     from being pulled out in the event of a breach.\n@param _paymentId Identifier for payment\n@param _active Whether it will be active or inactive",
            "id": 1656,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1627,
                    "name": "MANAGE_PAYMENTS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 880,
                    "src": "13455:20:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1629,
                        "name": "_paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1622,
                        "src": "13481:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "condition": {
                              "argumentTypes": null,
                              "id": 1631,
                              "name": "_active",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1624,
                              "src": "13501:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1633,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13515:1:3",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "id": 1634,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "Conditional",
                            "src": "13501:15:3",
                            "trueExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 1632,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13511:1:3",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "id": 1630,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "13493:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 1635,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13493:24:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1628,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7175,
                        7190,
                        7210,
                        7225,
                        7245,
                        7266,
                        7290,
                        7310,
                        7339,
                        7364,
                        7389,
                        7412,
                        7443,
                        7482,
                        7529,
                        7584
                      ],
                      "referencedDeclaration": 7443,
                      "src": "13477:3:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 1636,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13477:41:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 1637,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1626,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8406,
                  "src": "13449:5:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13449:70:3"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1639,
                    "name": "_paymentId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1622,
                    "src": "13542:10:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 1640,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1638,
                  "name": "paymentExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1127,
                  "src": "13528:13:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13528:25:3"
              }
            ],
            "name": "setPaymentStatus",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1625,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1622,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1656,
                  "src": "13390:18:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1621,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13390:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1624,
                  "name": "_active",
                  "nodeType": "VariableDeclaration",
                  "scope": 1656,
                  "src": "13410:12:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1623,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "13410:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13389:34:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1641,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13558:0:3"
            },
            "scope": 2645,
            "src": "13364:305:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1697,
              "nodeType": "Block",
              "src": "14161:297:3",
              "statements": [
                {
                  "assignments": [
                    1666
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1666,
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 1698,
                      "src": "14171:14:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1665,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14171:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1681,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 1669,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1667,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1658,
                        "src": "14188:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 1668,
                        "name": "ETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8620,
                        "src": "14198:3:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "14188:13:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1678,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12791,
                          "src": "14252:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Finance_$2645",
                            "typeString": "contract Finance"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_Finance_$2645",
                            "typeString": "contract Finance"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1675,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1658,
                              "src": "14234:6:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1674,
                            "name": "ERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11941,
                            "src": "14228:5:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_ERC20_$11941_$",
                              "typeString": "type(contract ERC20)"
                            }
                          },
                          "id": 1676,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14228:13:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$11941",
                            "typeString": "contract ERC20"
                          }
                        },
                        "id": 1677,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "balanceOf",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 11886,
                        "src": "14228:23:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                          "typeString": "function (address) view external returns (uint256)"
                        }
                      },
                      "id": 1679,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14228:29:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1680,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "14188:69:3",
                    "trueExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1671,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12791,
                            "src": "14212:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Finance_$2645",
                              "typeString": "contract Finance"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Finance_$2645",
                              "typeString": "contract Finance"
                            }
                          ],
                          "id": 1670,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14204:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 1672,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14204:13:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 1673,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "14204:21:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14171:86:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1685,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1683,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1666,
                          "src": "14275:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1684,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14284:1:3",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "14275:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1686,
                        "name": "ERROR_RECOVER_AMOUNT_ZERO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 928,
                        "src": "14287:25:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1682,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "14267:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1687,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14267:46:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1688,
                  "nodeType": "ExpressionStatement",
                  "src": "14267:46:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1690,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1658,
                        "src": "14346:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1691,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1666,
                        "src": "14366:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5265636f76657220746f205661756c74",
                        "id": 1692,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14386:18:3",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_44b346127d1482933635aa4b55865bc72d4d3e4d60d301bd26394661695fe15d",
                          "typeString": "literal_string \"Recover to Vault\""
                        },
                        "value": "Recover to Vault"
                      },
                      {
                        "argumentTypes": null,
                        "id": 1693,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12791,
                        "src": "14418:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Finance_$2645",
                          "typeString": "contract Finance"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 1694,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14436:5:3",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_44b346127d1482933635aa4b55865bc72d4d3e4d60d301bd26394661695fe15d",
                          "typeString": "literal_string \"Recover to Vault\""
                        },
                        {
                          "typeIdentifier": "t_contract$_Finance_$2645",
                          "typeString": "contract Finance"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1689,
                      "name": "_deposit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2152,
                      "src": "14324:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_string_memory_ptr_$_t_address_$_t_bool_$returns$__$",
                        "typeString": "function (address,uint256,string memory,address,bool)"
                      }
                    },
                    "id": 1695,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14324:127:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1696,
                  "nodeType": "ExpressionStatement",
                  "src": "14324:127:3"
                }
              ]
            },
            "documentation": "@dev Allows making a simple payment from this contract to the Vault, to avoid locked tokens.\n     This contract should never receive tokens with a simple transfer call, but in case it\n     happens, this function allows for their recovery.\n@notice Send tokens held in this contract to the Vault\n@param _token Token whose balance is going to be transferred.",
            "id": 1698,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 1661,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1660,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8703,
                  "src": "14129:13:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14129:13:3"
              },
              {
                "arguments": null,
                "id": 1663,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1662,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1110,
                  "src": "14143:17:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14143:17:3"
              }
            ],
            "name": "recoverToVault",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1659,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1658,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 1698,
                  "src": "14106:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1657,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14106:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14105:16:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1664,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14161:0:3"
            },
            "scope": 2645,
            "src": "14082:376:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1711,
              "nodeType": "Block",
              "src": "15119:71:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1708,
                        "name": "_maxTransitions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1700,
                        "src": "15167:15:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 1707,
                      "name": "_tryTransitionAccountingPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2557,
                      "src": "15136:30:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (uint256) returns (bool)"
                      }
                    },
                    "id": 1709,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15136:47:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1706,
                  "id": 1710,
                  "nodeType": "Return",
                  "src": "15129:54:3"
                }
              ]
            },
            "documentation": "@dev Transitions accounting periods if needed. For preventing OOG attacks, a maxTransitions\n     param is provided. If more than the specified number of periods need to be transitioned,\n     it will return false.\n@notice Transition accounting period if needed\n@param _maxTransitions Maximum periods that can be transitioned\n@return success Boolean indicating whether the accounting period is the correct one (if false,\n                maxTransitions was surpased and another call is needed)",
            "id": 1712,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 1703,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1702,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8703,
                  "src": "15082:13:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15082:13:3"
              }
            ],
            "name": "tryTransitionAccountingPeriod",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1701,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1700,
                  "name": "_maxTransitions",
                  "nodeType": "VariableDeclaration",
                  "scope": 1712,
                  "src": "15051:22:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1699,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "15051:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15050:24:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1706,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1705,
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 1712,
                  "src": "15105:12:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1704,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "15105:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15104:14:3"
            },
            "scope": 2645,
            "src": "15012:178:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1723,
              "nodeType": "Block",
              "src": "15553:41:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1721,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "15570:17:3",
                    "subExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 1719,
                        "name": "hasInitialized",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8733,
                        "src": "15571:14:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                          "typeString": "function () view returns (bool)"
                        }
                      },
                      "id": 1720,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15571:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1718,
                  "id": 1722,
                  "nodeType": "Return",
                  "src": "15563:24:3"
                }
              ]
            },
            "documentation": "@dev Disable recovery escape hatch if the app has been initialized, as it could be used\n     maliciously to transfer funds in the Finance app to another Vault\n     finance#recoverToVault() should be used to recover funds to the Finance's vault",
            "id": 1724,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "allowRecoverability",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1715,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1714,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1724,
                  "src": "15517:7:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1713,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15517:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15516:9:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1718,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1717,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1724,
                  "src": "15547:4:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1716,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "15547:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15546:6:3"
            },
            "scope": 2645,
            "src": "15488:106:3",
            "stateMutability": "view",
            "superFunction": 9060,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1801,
              "nodeType": "Block",
              "src": "16003:411:3",
              "statements": [
                {
                  "assignments": [
                    1751
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1751,
                      "name": "payment",
                      "nodeType": "VariableDeclaration",
                      "scope": 1802,
                      "src": "16013:23:3",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                        "typeString": "struct Finance.Payment"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1750,
                        "name": "Payment",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 974,
                        "src": "16013:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1755,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1752,
                      "name": "payments",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1028,
                      "src": "16039:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Payment_$974_storage_$",
                        "typeString": "mapping(uint256 => struct Finance.Payment storage ref)"
                      }
                    },
                    "id": 1754,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1753,
                      "name": "_paymentId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1726,
                      "src": "16048:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "16039:20:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Payment_$974_storage",
                      "typeString": "struct Finance.Payment storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16013:46:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1759,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1756,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1732,
                      "src": "16070:5:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1757,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1751,
                        "src": "16078:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment storage pointer"
                        }
                      },
                      "id": 1758,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "token",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 957,
                      "src": "16078:13:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "16070:21:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1760,
                  "nodeType": "ExpressionStatement",
                  "src": "16070:21:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1764,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1761,
                      "name": "receiver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1734,
                      "src": "16101:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1762,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1751,
                        "src": "16112:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment storage pointer"
                        }
                      },
                      "id": 1763,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "receiver",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 959,
                      "src": "16112:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "16101:27:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1765,
                  "nodeType": "ExpressionStatement",
                  "src": "16101:27:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1769,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1766,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1736,
                      "src": "16138:6:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1767,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1751,
                        "src": "16147:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment storage pointer"
                        }
                      },
                      "id": 1768,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 965,
                      "src": "16147:14:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "16138:23:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1770,
                  "nodeType": "ExpressionStatement",
                  "src": "16138:23:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1774,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1771,
                      "name": "initialPaymentTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1738,
                      "src": "16171:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1772,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1751,
                        "src": "16192:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment storage pointer"
                        }
                      },
                      "id": 1773,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialPaymentTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 967,
                      "src": "16192:26:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "16171:47:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1775,
                  "nodeType": "ExpressionStatement",
                  "src": "16171:47:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1779,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1776,
                      "name": "interval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1740,
                      "src": "16228:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1777,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1751,
                        "src": "16239:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment storage pointer"
                        }
                      },
                      "id": 1778,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "interval",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 969,
                      "src": "16239:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "16228:27:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1780,
                  "nodeType": "ExpressionStatement",
                  "src": "16228:27:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1784,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1781,
                      "name": "maxRepeats",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1742,
                      "src": "16265:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1782,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1751,
                        "src": "16278:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment storage pointer"
                        }
                      },
                      "id": 1783,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "maxRepeats",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 971,
                      "src": "16278:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "16265:31:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1785,
                  "nodeType": "ExpressionStatement",
                  "src": "16265:31:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1789,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1786,
                      "name": "repeats",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1746,
                      "src": "16306:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1787,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1751,
                        "src": "16316:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment storage pointer"
                        }
                      },
                      "id": 1788,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "repeats",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 973,
                      "src": "16316:15:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "16306:25:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1790,
                  "nodeType": "ExpressionStatement",
                  "src": "16306:25:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1794,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1791,
                      "name": "inactive",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1744,
                      "src": "16341:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1792,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1751,
                        "src": "16352:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment storage pointer"
                        }
                      },
                      "id": 1793,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "inactive",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 963,
                      "src": "16352:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "16341:27:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1795,
                  "nodeType": "ExpressionStatement",
                  "src": "16341:27:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1799,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1796,
                      "name": "createdBy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1748,
                      "src": "16378:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1797,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1751,
                        "src": "16390:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment storage pointer"
                        }
                      },
                      "id": 1798,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "createdBy",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 961,
                      "src": "16390:17:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "16378:29:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1800,
                  "nodeType": "ExpressionStatement",
                  "src": "16378:29:3"
                }
              ]
            },
            "documentation": null,
            "id": 1802,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1729,
                    "name": "_paymentId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1726,
                    "src": "15690:10:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 1730,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1728,
                  "name": "paymentExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1127,
                  "src": "15676:13:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15676:25:3"
              }
            ],
            "name": "getPayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1727,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1726,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1802,
                  "src": "15620:18:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1725,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15620:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15619:20:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1749,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1732,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 1802,
                  "src": "15732:13:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1731,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15732:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1734,
                  "name": "receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 1802,
                  "src": "15759:16:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1733,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15759:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1736,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1802,
                  "src": "15789:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1735,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15789:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1738,
                  "name": "initialPaymentTime",
                  "nodeType": "VariableDeclaration",
                  "scope": 1802,
                  "src": "15817:25:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1737,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "15817:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1740,
                  "name": "interval",
                  "nodeType": "VariableDeclaration",
                  "scope": 1802,
                  "src": "15856:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1739,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "15856:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1742,
                  "name": "maxRepeats",
                  "nodeType": "VariableDeclaration",
                  "scope": 1802,
                  "src": "15885:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1741,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "15885:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1744,
                  "name": "inactive",
                  "nodeType": "VariableDeclaration",
                  "scope": 1802,
                  "src": "15916:13:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1743,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "15916:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1746,
                  "name": "repeats",
                  "nodeType": "VariableDeclaration",
                  "scope": 1802,
                  "src": "15943:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1745,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "15943:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1748,
                  "name": "createdBy",
                  "nodeType": "VariableDeclaration",
                  "scope": 1802,
                  "src": "15971:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1747,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15971:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15718:280:3"
            },
            "scope": 2645,
            "src": "15600:814:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1872,
              "nodeType": "Block",
              "src": "16806:414:3",
              "statements": [
                {
                  "assignments": [
                    1827
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1827,
                      "name": "transaction",
                      "nodeType": "VariableDeclaration",
                      "scope": 1873,
                      "src": "16816:31:3",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                        "typeString": "struct Finance.Transaction"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1826,
                        "name": "Transaction",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 991,
                        "src": "16816:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1831,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1828,
                      "name": "transactions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1034,
                      "src": "16850:12:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Transaction_$991_storage_$",
                        "typeString": "mapping(uint256 => struct Finance.Transaction storage ref)"
                      }
                    },
                    "id": 1830,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1829,
                      "name": "_transactionId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1804,
                      "src": "16863:14:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "16850:28:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Transaction_$991_storage",
                      "typeString": "struct Finance.Transaction storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16816:62:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1835,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1832,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1818,
                      "src": "16889:5:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1833,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1827,
                        "src": "16897:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 1834,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "token",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 976,
                      "src": "16897:17:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "16889:25:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1836,
                  "nodeType": "ExpressionStatement",
                  "src": "16889:25:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1840,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1837,
                      "name": "entity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1820,
                      "src": "16924:6:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1838,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1827,
                        "src": "16933:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 1839,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "entity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 978,
                      "src": "16933:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "16924:27:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1841,
                  "nodeType": "ExpressionStatement",
                  "src": "16924:27:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1845,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1842,
                      "name": "isIncoming",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1822,
                      "src": "16961:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1843,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1827,
                        "src": "16974:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 1844,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "isIncoming",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 980,
                      "src": "16974:22:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "16961:35:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1846,
                  "nodeType": "ExpressionStatement",
                  "src": "16961:35:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1850,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1847,
                      "name": "date",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1824,
                      "src": "17006:4:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1848,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1827,
                        "src": "17013:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 1849,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "date",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 988,
                      "src": "17013:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "17006:23:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1851,
                  "nodeType": "ExpressionStatement",
                  "src": "17006:23:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1855,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1852,
                      "name": "periodId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1810,
                      "src": "17039:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1853,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1827,
                        "src": "17050:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 1854,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "periodId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 990,
                      "src": "17050:20:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "17039:31:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1856,
                  "nodeType": "ExpressionStatement",
                  "src": "17039:31:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1860,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1857,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1812,
                      "src": "17080:6:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1858,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1827,
                        "src": "17089:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 1859,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 982,
                      "src": "17089:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17080:27:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1861,
                  "nodeType": "ExpressionStatement",
                  "src": "17080:27:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1865,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1862,
                      "name": "paymentId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1814,
                      "src": "17117:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1863,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1827,
                        "src": "17129:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 1864,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "paymentId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 984,
                      "src": "17129:21:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17117:33:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1866,
                  "nodeType": "ExpressionStatement",
                  "src": "17117:33:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1870,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1867,
                      "name": "paymentRepeatNumber",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1816,
                      "src": "17160:19:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1868,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1827,
                        "src": "17182:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 1869,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "paymentRepeatNumber",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 986,
                      "src": "17182:31:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "17160:53:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1871,
                  "nodeType": "ExpressionStatement",
                  "src": "17160:53:3"
                }
              ]
            },
            "documentation": null,
            "id": 1873,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1807,
                    "name": "_transactionId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1804,
                    "src": "16522:14:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 1808,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1806,
                  "name": "transactionExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1144,
                  "src": "16504:17:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16504:33:3"
              }
            ],
            "name": "getTransaction",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1805,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1804,
                  "name": "_transactionId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1873,
                  "src": "16444:22:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1803,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16444:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16443:24:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1825,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1810,
                  "name": "periodId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1873,
                  "src": "16568:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1809,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "16568:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1812,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1873,
                  "src": "16597:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1811,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16597:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1814,
                  "name": "paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1873,
                  "src": "16625:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1813,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16625:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1816,
                  "name": "paymentRepeatNumber",
                  "nodeType": "VariableDeclaration",
                  "scope": 1873,
                  "src": "16656:26:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1815,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "16656:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1818,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 1873,
                  "src": "16696:13:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1817,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16696:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1820,
                  "name": "entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 1873,
                  "src": "16723:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1819,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16723:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1822,
                  "name": "isIncoming",
                  "nodeType": "VariableDeclaration",
                  "scope": 1873,
                  "src": "16751:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1821,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "16751:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1824,
                  "name": "date",
                  "nodeType": "VariableDeclaration",
                  "scope": 1873,
                  "src": "16780:11:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1823,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "16780:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16554:247:3"
            },
            "scope": 2645,
            "src": "16420:800:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1924,
              "nodeType": "Block",
              "src": "17519:296:3",
              "statements": [
                {
                  "assignments": [
                    1892
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1892,
                      "name": "period",
                      "nodeType": "VariableDeclaration",
                      "scope": 1925,
                      "src": "17529:21:3",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                        "typeString": "struct Finance.Period"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1891,
                        "name": "Period",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 1009,
                        "src": "17529:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                          "typeString": "struct Finance.Period"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1896,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1893,
                      "name": "periods",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1040,
                      "src": "17553:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$1009_storage_$",
                        "typeString": "mapping(uint64 => struct Finance.Period storage ref)"
                      }
                    },
                    "id": 1895,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1894,
                      "name": "_periodId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1875,
                      "src": "17561:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "17553:18:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Period_$1009_storage",
                      "typeString": "struct Finance.Period storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17529:42:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1902,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1897,
                      "name": "isCurrent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1881,
                      "src": "17582:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "id": 1901,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1898,
                          "name": "_currentPeriodId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2636,
                          "src": "17594:16:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                            "typeString": "function () view returns (uint64)"
                          }
                        },
                        "id": 1899,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17594:18:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 1900,
                        "name": "_periodId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1875,
                        "src": "17616:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "src": "17594:31:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "17582:43:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1903,
                  "nodeType": "ExpressionStatement",
                  "src": "17582:43:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1907,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1904,
                      "name": "startTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1883,
                      "src": "17636:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1905,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1892,
                        "src": "17648:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                          "typeString": "struct Finance.Period storage pointer"
                        }
                      },
                      "id": 1906,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "startTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 998,
                      "src": "17648:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "17636:28:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1908,
                  "nodeType": "ExpressionStatement",
                  "src": "17636:28:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1912,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1909,
                      "name": "endTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1885,
                      "src": "17674:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1910,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1892,
                        "src": "17684:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                          "typeString": "struct Finance.Period storage pointer"
                        }
                      },
                      "id": 1911,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "endTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1000,
                      "src": "17684:14:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "17674:24:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1913,
                  "nodeType": "ExpressionStatement",
                  "src": "17674:24:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1917,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1914,
                      "name": "firstTransactionId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1887,
                      "src": "17708:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1915,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1892,
                        "src": "17729:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                          "typeString": "struct Finance.Period storage pointer"
                        }
                      },
                      "id": 1916,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "firstTransactionId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1002,
                      "src": "17729:25:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17708:46:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1918,
                  "nodeType": "ExpressionStatement",
                  "src": "17708:46:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1922,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1919,
                      "name": "lastTransactionId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1889,
                      "src": "17764:17:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1920,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1892,
                        "src": "17784:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                          "typeString": "struct Finance.Period storage pointer"
                        }
                      },
                      "id": 1921,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "lastTransactionId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1004,
                      "src": "17784:24:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17764:44:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1923,
                  "nodeType": "ExpressionStatement",
                  "src": "17764:44:3"
                }
              ]
            },
            "documentation": null,
            "id": 1925,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1878,
                    "name": "_periodId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1875,
                    "src": "17312:9:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  }
                ],
                "id": 1879,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1877,
                  "name": "periodExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1157,
                  "src": "17299:12:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint64_$",
                    "typeString": "modifier (uint64)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17299:23:3"
              }
            ],
            "name": "getPeriod",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1876,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1875,
                  "name": "_periodId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1925,
                  "src": "17245:16:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1874,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "17245:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17244:18:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1890,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1881,
                  "name": "isCurrent",
                  "nodeType": "VariableDeclaration",
                  "scope": 1925,
                  "src": "17353:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1880,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "17353:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1883,
                  "name": "startTime",
                  "nodeType": "VariableDeclaration",
                  "scope": 1925,
                  "src": "17381:16:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1882,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "17381:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1885,
                  "name": "endTime",
                  "nodeType": "VariableDeclaration",
                  "scope": 1925,
                  "src": "17411:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1884,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "17411:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1887,
                  "name": "firstTransactionId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1925,
                  "src": "17439:26:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1886,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17439:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1889,
                  "name": "lastTransactionId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1925,
                  "src": "17479:25:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1888,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17479:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17339:175:3"
            },
            "scope": 2645,
            "src": "17226:589:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1958,
              "nodeType": "Block",
              "src": "18003:182:3",
              "statements": [
                {
                  "assignments": [
                    1940
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1940,
                      "name": "tokenStatement",
                      "nodeType": "VariableDeclaration",
                      "scope": 1959,
                      "src": "18013:37:3",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TokenStatement_$996_storage_ptr",
                        "typeString": "struct Finance.TokenStatement"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1939,
                        "name": "TokenStatement",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 996,
                        "src": "18013:14:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenStatement_$996_storage_ptr",
                          "typeString": "struct Finance.TokenStatement"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1947,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1941,
                          "name": "periods",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1040,
                          "src": "18053:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$1009_storage_$",
                            "typeString": "mapping(uint64 => struct Finance.Period storage ref)"
                          }
                        },
                        "id": 1943,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1942,
                          "name": "_periodId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1927,
                          "src": "18061:9:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "18053:18:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$1009_storage",
                          "typeString": "struct Finance.Period storage ref"
                        }
                      },
                      "id": 1944,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "tokenStatement",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1008,
                      "src": "18053:33:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TokenStatement_$996_storage_$",
                        "typeString": "mapping(address => struct Finance.TokenStatement storage ref)"
                      }
                    },
                    "id": 1946,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1945,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1929,
                      "src": "18087:6:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "18053:41:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TokenStatement_$996_storage",
                      "typeString": "struct Finance.TokenStatement storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18013:81:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1951,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1948,
                      "name": "expenses",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1935,
                      "src": "18104:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1949,
                        "name": "tokenStatement",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1940,
                        "src": "18115:14:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenStatement_$996_storage_ptr",
                          "typeString": "struct Finance.TokenStatement storage pointer"
                        }
                      },
                      "id": 1950,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "expenses",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 993,
                      "src": "18115:23:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18104:34:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1952,
                  "nodeType": "ExpressionStatement",
                  "src": "18104:34:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1956,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1953,
                      "name": "income",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1937,
                      "src": "18148:6:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1954,
                        "name": "tokenStatement",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1940,
                        "src": "18157:14:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenStatement_$996_storage_ptr",
                          "typeString": "struct Finance.TokenStatement storage pointer"
                        }
                      },
                      "id": 1955,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "income",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 995,
                      "src": "18157:21:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18148:30:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1957,
                  "nodeType": "ExpressionStatement",
                  "src": "18148:30:3"
                }
              ]
            },
            "documentation": null,
            "id": 1959,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1932,
                    "name": "_periodId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1927,
                    "src": "17937:9:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  }
                ],
                "id": 1933,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1931,
                  "name": "periodExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1157,
                  "src": "17924:12:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint64_$",
                    "typeString": "modifier (uint64)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17924:23:3"
              }
            ],
            "name": "getPeriodTokenStatement",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1930,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1927,
                  "name": "_periodId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1959,
                  "src": "17854:16:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1926,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "17854:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1929,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 1959,
                  "src": "17872:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1928,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17872:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17853:34:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1938,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1935,
                  "name": "expenses",
                  "nodeType": "VariableDeclaration",
                  "scope": 1959,
                  "src": "17965:16:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1934,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17965:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1937,
                  "name": "income",
                  "nodeType": "VariableDeclaration",
                  "scope": 1959,
                  "src": "17983:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1936,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17983:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17964:34:3"
            },
            "scope": 2645,
            "src": "17821:364:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2003,
              "nodeType": "Block",
              "src": "18291:460:3",
              "statements": [
                {
                  "assignments": [
                    1970
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1970,
                      "name": "payment",
                      "nodeType": "VariableDeclaration",
                      "scope": 2004,
                      "src": "18301:22:3",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Payment_$974_memory_ptr",
                        "typeString": "struct Finance.Payment"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1969,
                        "name": "Payment",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 974,
                        "src": "18301:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1974,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1971,
                      "name": "payments",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1028,
                      "src": "18326:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Payment_$974_storage_$",
                        "typeString": "mapping(uint256 => struct Finance.Payment storage ref)"
                      }
                    },
                    "id": 1973,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1972,
                      "name": "_paymentId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1961,
                      "src": "18335:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "18326:20:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Payment_$974_storage",
                      "typeString": "struct Finance.Payment storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18301:45:3"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 1979,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1975,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1970,
                        "src": "18361:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_memory_ptr",
                          "typeString": "struct Finance.Payment memory"
                        }
                      },
                      "id": 1976,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "repeats",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 973,
                      "src": "18361:15:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1977,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1970,
                        "src": "18380:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_memory_ptr",
                          "typeString": "struct Finance.Payment memory"
                        }
                      },
                      "id": 1978,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "maxRepeats",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 971,
                      "src": "18380:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "18361:37:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1983,
                  "nodeType": "IfStatement",
                  "src": "18357:159:3",
                  "trueBody": {
                    "id": 1982,
                    "nodeType": "Block",
                    "src": "18400:116:3",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1980,
                          "name": "MAX_UINT64",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 901,
                          "src": "18421:10:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "functionReturnParameters": 1968,
                        "id": 1981,
                        "nodeType": "Return",
                        "src": "18414:17:3"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1985
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1985,
                      "name": "increase",
                      "nodeType": "VariableDeclaration",
                      "scope": 2004,
                      "src": "18590:15:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 1984,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "18590:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1992,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1989,
                          "name": "payment",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1970,
                          "src": "18628:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Payment_$974_memory_ptr",
                            "typeString": "struct Finance.Payment memory"
                          }
                        },
                        "id": 1990,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "interval",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 969,
                        "src": "18628:16:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1986,
                          "name": "payment",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1970,
                          "src": "18608:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Payment_$974_memory_ptr",
                            "typeString": "struct Finance.Payment memory"
                          }
                        },
                        "id": 1987,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "repeats",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 973,
                        "src": "18608:15:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "id": 1988,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11756,
                      "src": "18608:19:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint64_$_t_uint64_$returns$_t_uint64_$bound_to$_t_uint64_$",
                        "typeString": "function (uint64,uint64) pure returns (uint64)"
                      }
                    },
                    "id": 1991,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18608:37:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18590:55:3"
                },
                {
                  "assignments": [
                    1994
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1994,
                      "name": "nextPayment",
                      "nodeType": "VariableDeclaration",
                      "scope": 2004,
                      "src": "18655:18:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 1993,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "18655:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2000,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1998,
                        "name": "increase",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1985,
                        "src": "18707:8:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1995,
                          "name": "payment",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1970,
                          "src": "18676:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Payment_$974_memory_ptr",
                            "typeString": "struct Finance.Payment memory"
                          }
                        },
                        "id": 1996,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "initialPaymentTime",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 967,
                        "src": "18676:26:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "id": 1997,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11831,
                      "src": "18676:30:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint64_$_t_uint64_$returns$_t_uint64_$bound_to$_t_uint64_$",
                        "typeString": "function (uint64,uint64) pure returns (uint64)"
                      }
                    },
                    "id": 1999,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18676:40:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18655:61:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2001,
                    "name": "nextPayment",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1994,
                    "src": "18733:11:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 1968,
                  "id": 2002,
                  "nodeType": "Return",
                  "src": "18726:18:3"
                }
              ]
            },
            "documentation": null,
            "id": 2004,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1964,
                    "name": "_paymentId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1961,
                    "src": "18262:10:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 1965,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1963,
                  "name": "paymentExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1127,
                  "src": "18248:13:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18248:25:3"
              }
            ],
            "name": "nextPaymentTime",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1962,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1961,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 2004,
                  "src": "18216:18:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1960,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18216:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18215:20:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1968,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1967,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2004,
                  "src": "18283:6:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1966,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "18283:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18282:8:3"
            },
            "scope": 2645,
            "src": "18191:560:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2012,
              "nodeType": "Block",
              "src": "18815:47:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 2009,
                      "name": "settings",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1024,
                      "src": "18832:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Settings_$1020_storage",
                        "typeString": "struct Finance.Settings storage ref"
                      }
                    },
                    "id": 2010,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "periodDuration",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 1011,
                    "src": "18832:23:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 2008,
                  "id": 2011,
                  "nodeType": "Return",
                  "src": "18825:30:3"
                }
              ]
            },
            "documentation": null,
            "id": 2013,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getPeriodDuration",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2005,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18783:2:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 2008,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2007,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2013,
                  "src": "18807:6:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 2006,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "18807:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18806:8:3"
            },
            "scope": 2645,
            "src": "18757:105:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2036,
              "nodeType": "Block",
              "src": "18956:98:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2027,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2022,
                      "name": "budget",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2018,
                      "src": "18966:6:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2023,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1024,
                          "src": "18975:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$1020_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 2024,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "budgets",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1015,
                        "src": "18975:16:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 2026,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2025,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2015,
                        "src": "18992:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "18975:24:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18966:33:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2028,
                  "nodeType": "ExpressionStatement",
                  "src": "18966:33:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2034,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2029,
                      "name": "hasBudget",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2020,
                      "src": "19009:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2030,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1024,
                          "src": "19021:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$1020_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 2031,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hasBudget",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1019,
                        "src": "19021:18:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 2033,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2032,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2015,
                        "src": "19040:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "19021:26:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "19009:38:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2035,
                  "nodeType": "ExpressionStatement",
                  "src": "19009:38:3"
                }
              ]
            },
            "documentation": null,
            "id": 2037,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getBudget",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2016,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2015,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2037,
                  "src": "18887:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2014,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18887:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18886:16:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 2021,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2018,
                  "name": "budget",
                  "nodeType": "VariableDeclaration",
                  "scope": 2037,
                  "src": "18924:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2017,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18924:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2020,
                  "name": "hasBudget",
                  "nodeType": "VariableDeclaration",
                  "scope": 2037,
                  "src": "18940:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2019,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "18940:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18923:32:3"
            },
            "scope": 2645,
            "src": "18868:186:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2050,
              "nodeType": "Block",
              "src": "19255:51:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2047,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2039,
                        "src": "19292:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2046,
                      "name": "_getRemainingBudget",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2626,
                      "src": "19272:19:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 2048,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19272:27:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2045,
                  "id": 2049,
                  "nodeType": "Return",
                  "src": "19265:34:3"
                }
              ]
            },
            "documentation": "@dev We have to check for initialization as periods are only valid after initializing",
            "id": 2051,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": null,
                "id": 2042,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2041,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8703,
                  "src": "19223:13:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "19223:13:3"
              }
            ],
            "name": "getRemainingBudget",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2040,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2039,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2051,
                  "src": "19195:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2038,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19195:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19194:16:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 2045,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2044,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2051,
                  "src": "19246:7:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2043,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19246:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19245:9:3"
            },
            "scope": 2645,
            "src": "19167:139:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2061,
              "nodeType": "Block",
              "src": "19489:42:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 2058,
                      "name": "_currentPeriodId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2636,
                      "src": "19506:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                        "typeString": "function () view returns (uint64)"
                      }
                    },
                    "id": 2059,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19506:18:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 2057,
                  "id": 2060,
                  "nodeType": "Return",
                  "src": "19499:25:3"
                }
              ]
            },
            "documentation": "@dev We have to check for initialization as periods are only valid after initializing",
            "id": 2062,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": null,
                "id": 2054,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2053,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8703,
                  "src": "19458:13:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "19458:13:3"
              }
            ],
            "name": "currentPeriodId",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2052,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19443:2:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 2057,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2056,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2062,
                  "src": "19481:6:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 2055,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "19481:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19480:8:3"
            },
            "scope": 2645,
            "src": "19419:112:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2151,
              "nodeType": "Block",
              "src": "19679:1122:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2078,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2076,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2066,
                          "src": "19697:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2077,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "19707:1:3",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "19697:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2079,
                        "name": "ERROR_DEPOSIT_AMOUNT_ZERO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 931,
                        "src": "19710:25:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 2075,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "19689:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2080,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19689:47:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2081,
                  "nodeType": "ExpressionStatement",
                  "src": "19689:47:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2083,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2064,
                        "src": "19786:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2084,
                        "name": "_sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2070,
                        "src": "19806:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2085,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2066,
                        "src": "19827:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2086,
                        "name": "_reference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2068,
                        "src": "19848:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 2082,
                      "name": "_recordIncomingTransaction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2348,
                      "src": "19746:26:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,uint256,string memory)"
                      }
                    },
                    "id": 2087,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19746:122:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2088,
                  "nodeType": "ExpressionStatement",
                  "src": "19746:122:3"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 2089,
                    "name": "_isExternalDeposit",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2072,
                    "src": "20117:18:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2118,
                  "nodeType": "IfStatement",
                  "src": "20113:431:3",
                  "trueBody": {
                    "id": 2117,
                    "nodeType": "Block",
                    "src": "20137:407:3",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 2092,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2090,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2064,
                            "src": "20155:6:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2091,
                            "name": "ETH",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8620,
                            "src": "20165:3:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "20155:13:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 2115,
                          "nodeType": "Block",
                          "src": "20352:182:3",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2111,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 2108,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 12670,
                                        "src": "20476:3:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 2109,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "value",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "20476:9:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 2110,
                                      "name": "_amount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2066,
                                      "src": "20489:7:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "20476:20:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 2112,
                                    "name": "ERROR_VALUE_MISMATCH",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 949,
                                    "src": "20498:20:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_string_memory",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 2107,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    12673,
                                    12674
                                  ],
                                  "referencedDeclaration": 12674,
                                  "src": "20468:7:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 2113,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "20468:51:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2114,
                              "nodeType": "ExpressionStatement",
                              "src": "20468:51:3"
                            }
                          ]
                        },
                        "id": 2116,
                        "nodeType": "IfStatement",
                        "src": "20151:383:3",
                        "trueBody": {
                          "id": 2106,
                          "nodeType": "Block",
                          "src": "20170:176:3",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 2098,
                                          "name": "msg",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 12670,
                                          "src": "20268:3:3",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_message",
                                            "typeString": "msg"
                                          }
                                        },
                                        "id": 2099,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "sender",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "20268:10:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 2100,
                                        "name": "this",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 12791,
                                        "src": "20280:4:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_Finance_$2645",
                                          "typeString": "contract Finance"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 2101,
                                        "name": "_amount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2066,
                                        "src": "20286:7:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_contract$_Finance_$2645",
                                          "typeString": "contract Finance"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 2095,
                                            "name": "_token",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2064,
                                            "src": "20247:6:3",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "id": 2094,
                                          "name": "ERC20",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 11941,
                                          "src": "20241:5:3",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_ERC20_$11941_$",
                                            "typeString": "type(contract ERC20)"
                                          }
                                        },
                                        "id": 2096,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "20241:13:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_ERC20_$11941",
                                          "typeString": "contract ERC20"
                                        }
                                      },
                                      "id": 2097,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "transferFrom",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 11924,
                                      "src": "20241:26:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                        "typeString": "function (address,address,uint256) external returns (bool)"
                                      }
                                    },
                                    "id": 2102,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "20241:53:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 2103,
                                    "name": "ERROR_TOKEN_TRANSFER_FROM_REVERTED",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 946,
                                    "src": "20296:34:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_string_memory",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 2093,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    12673,
                                    12674
                                  ],
                                  "referencedDeclaration": 12674,
                                  "src": "20233:7:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 2104,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "20233:98:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2105,
                              "nodeType": "ExpressionStatement",
                              "src": "20233:98:3"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 2121,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2119,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2064,
                      "src": "20558:6:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2120,
                      "name": "ETH",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8620,
                      "src": "20568:3:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "20558:13:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 2149,
                    "nodeType": "Block",
                    "src": "20646:149:3",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2138,
                              "name": "vault",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1022,
                              "src": "20682:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Vault_$4917",
                                "typeString": "contract Vault"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2139,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2066,
                              "src": "20689:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_Vault_$4917",
                                "typeString": "contract Vault"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2135,
                                  "name": "_token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2064,
                                  "src": "20666:6:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 2134,
                                "name": "ERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11941,
                                "src": "20660:5:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_ERC20_$11941_$",
                                  "typeString": "type(contract ERC20)"
                                }
                              },
                              "id": 2136,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "20660:13:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$11941",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 2137,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "approve",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 11913,
                            "src": "20660:21:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,uint256) external returns (bool)"
                            }
                          },
                          "id": 2140,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20660:37:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2141,
                        "nodeType": "ExpressionStatement",
                        "src": "20660:37:3"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2145,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2064,
                              "src": "20768:6:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2146,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2066,
                              "src": "20776:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2142,
                              "name": "vault",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1022,
                              "src": "20754:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Vault_$4917",
                                "typeString": "contract Vault"
                              }
                            },
                            "id": 2144,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "deposit",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4769,
                            "src": "20754:13:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_payable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256) payable external"
                            }
                          },
                          "id": 2147,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20754:30:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2148,
                        "nodeType": "ExpressionStatement",
                        "src": "20754:30:3"
                      }
                    ]
                  },
                  "id": 2150,
                  "nodeType": "IfStatement",
                  "src": "20554:241:3",
                  "trueBody": {
                    "id": 2133,
                    "nodeType": "Block",
                    "src": "20573:67:3",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2129,
                              "name": "ETH",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8620,
                              "src": "20616:3:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2130,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2066,
                              "src": "20621:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 2127,
                                "name": "_amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2066,
                                "src": "20607:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2122,
                                  "name": "vault",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1022,
                                  "src": "20587:5:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Vault_$4917",
                                    "typeString": "contract Vault"
                                  }
                                },
                                "id": 2125,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "deposit",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4769,
                                "src": "20587:13:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_payable$_t_address_$_t_uint256_$returns$__$",
                                  "typeString": "function (address,uint256) payable external"
                                }
                              },
                              "id": 2126,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "value",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "20587:19:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_setvalue_nonpayable$_t_uint256_$returns$_t_function_external_payable$_t_address_$_t_uint256_$returns$__$value_$",
                                "typeString": "function (uint256) returns (function (address,uint256) payable external)"
                              }
                            },
                            "id": 2128,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "20587:28:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_payable$_t_address_$_t_uint256_$returns$__$value",
                              "typeString": "function (address,uint256) payable external"
                            }
                          },
                          "id": 2131,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20587:42:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2132,
                        "nodeType": "ExpressionStatement",
                        "src": "20587:42:3"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 2152,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_deposit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2073,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2064,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2152,
                  "src": "19576:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2063,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19576:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2066,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2152,
                  "src": "19592:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2065,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19592:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2068,
                  "name": "_reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 2152,
                  "src": "19609:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2067,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "19609:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2070,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 2152,
                  "src": "19628:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2069,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19628:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2072,
                  "name": "_isExternalDeposit",
                  "nodeType": "VariableDeclaration",
                  "scope": 2152,
                  "src": "19645:23:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2071,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "19645:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19575:94:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 2074,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19679:0:3"
            },
            "scope": 2645,
            "src": "19558:1243:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2210,
              "nodeType": "Block",
              "src": "20880:704:3",
              "statements": [
                {
                  "assignments": [
                    2160
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2160,
                      "name": "newPeriodId",
                      "nodeType": "VariableDeclaration",
                      "scope": 2211,
                      "src": "20983:18:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 2159,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "20983:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2163,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 2162,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "++",
                    "prefix": false,
                    "src": "21004:15:3",
                    "subExpression": {
                      "argumentTypes": null,
                      "id": 2161,
                      "name": "periodsLength",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1042,
                      "src": "21004:13:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20983:36:3"
                },
                {
                  "assignments": [
                    2165
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2165,
                      "name": "period",
                      "nodeType": "VariableDeclaration",
                      "scope": 2211,
                      "src": "21030:21:3",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                        "typeString": "struct Finance.Period"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2164,
                        "name": "Period",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 1009,
                        "src": "21030:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                          "typeString": "struct Finance.Period"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2169,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 2166,
                      "name": "periods",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1040,
                      "src": "21054:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$1009_storage_$",
                        "typeString": "mapping(uint64 => struct Finance.Period storage ref)"
                      }
                    },
                    "id": 2168,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 2167,
                      "name": "newPeriodId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2160,
                      "src": "21062:11:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "21054:20:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Period_$1009_storage",
                      "typeString": "struct Finance.Period storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21030:44:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2174,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2170,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2165,
                        "src": "21084:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                          "typeString": "struct Finance.Period storage pointer"
                        }
                      },
                      "id": 2172,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "startTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 998,
                      "src": "21084:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2173,
                      "name": "_startTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2154,
                      "src": "21103:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "21084:29:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 2175,
                  "nodeType": "ExpressionStatement",
                  "src": "21084:29:3"
                },
                {
                  "assignments": [
                    2177
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2177,
                      "name": "endTime",
                      "nodeType": "VariableDeclaration",
                      "scope": 2211,
                      "src": "21296:14:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 2176,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "21296:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2184,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 2183,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "id": 2181,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2178,
                        "name": "_startTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2154,
                        "src": "21313:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2179,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1024,
                          "src": "21326:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$1020_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 2180,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "periodDuration",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "21326:23:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "src": "21313:36:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 2182,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21352:1:3",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "21313:40:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21296:57:3"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 2187,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2185,
                      "name": "endTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2177,
                      "src": "21367:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2186,
                      "name": "_startTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2154,
                      "src": "21377:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "21367:20:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2193,
                  "nodeType": "IfStatement",
                  "src": "21363:85:3",
                  "trueBody": {
                    "id": 2192,
                    "nodeType": "Block",
                    "src": "21389:59:3",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2190,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2188,
                            "name": "endTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2177,
                            "src": "21417:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 2189,
                            "name": "MAX_UINT64",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 901,
                            "src": "21427:10:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "21417:20:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "id": 2191,
                        "nodeType": "ExpressionStatement",
                        "src": "21417:20:3"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2198,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2194,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2165,
                        "src": "21457:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                          "typeString": "struct Finance.Period storage pointer"
                        }
                      },
                      "id": 2196,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "endTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1000,
                      "src": "21457:14:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2197,
                      "name": "endTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2177,
                      "src": "21474:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "21457:24:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 2199,
                  "nodeType": "ExpressionStatement",
                  "src": "21457:24:3"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2201,
                        "name": "newPeriodId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2160,
                        "src": "21507:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2202,
                          "name": "period",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2165,
                          "src": "21520:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                            "typeString": "struct Finance.Period storage pointer"
                          }
                        },
                        "id": 2203,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "startTime",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 998,
                        "src": "21520:16:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2204,
                          "name": "period",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2165,
                          "src": "21538:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                            "typeString": "struct Finance.Period storage pointer"
                          }
                        },
                        "id": 2205,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "endTime",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1000,
                        "src": "21538:14:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 2200,
                      "name": "NewPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1050,
                      "src": "21497:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint64_$_t_uint64_$_t_uint64_$returns$__$",
                        "typeString": "function (uint64,uint64,uint64)"
                      }
                    },
                    "id": 2206,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21497:56:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2207,
                  "nodeType": "EmitStatement",
                  "src": "21492:61:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2208,
                    "name": "period",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2165,
                    "src": "21571:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                      "typeString": "struct Finance.Period storage pointer"
                    }
                  },
                  "functionReturnParameters": 2158,
                  "id": 2209,
                  "nodeType": "Return",
                  "src": "21564:13:3"
                }
              ]
            },
            "documentation": null,
            "id": 2211,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_newPeriod",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2155,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2154,
                  "name": "_startTime",
                  "nodeType": "VariableDeclaration",
                  "scope": 2211,
                  "src": "20827:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 2153,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "20827:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20826:19:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 2158,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2157,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2211,
                  "src": "20864:6:3",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                    "typeString": "struct Finance.Period"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2156,
                    "name": "Period",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1009,
                    "src": "20864:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                      "typeString": "struct Finance.Period"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20863:16:3"
            },
            "scope": 2645,
            "src": "20807:777:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2282,
              "nodeType": "Block",
              "src": "21644:778:3",
              "statements": [
                {
                  "assignments": [
                    2217
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2217,
                      "name": "payment",
                      "nodeType": "VariableDeclaration",
                      "scope": 2283,
                      "src": "21654:23:3",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                        "typeString": "struct Finance.Payment"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2216,
                        "name": "Payment",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 974,
                        "src": "21654:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                          "typeString": "struct Finance.Payment"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2221,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 2218,
                      "name": "payments",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1028,
                      "src": "21680:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Payment_$974_storage_$",
                        "typeString": "mapping(uint256 => struct Finance.Payment storage ref)"
                      }
                    },
                    "id": 2220,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 2219,
                      "name": "_paymentId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2213,
                      "src": "21689:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "21680:20:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Payment_$974_storage",
                      "typeString": "struct Finance.Payment storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21654:46:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2225,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "21718:17:3",
                        "subExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2223,
                            "name": "payment",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2217,
                            "src": "21719:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                              "typeString": "struct Finance.Payment storage pointer"
                            }
                          },
                          "id": 2224,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "inactive",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 963,
                          "src": "21719:16:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2226,
                        "name": "ERROR_PAYMENT_INACTIVE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 952,
                        "src": "21737:22:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 2222,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "21710:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2227,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21710:50:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2228,
                  "nodeType": "ExpressionStatement",
                  "src": "21710:50:3"
                },
                {
                  "assignments": [
                    2230
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2230,
                      "name": "payed",
                      "nodeType": "VariableDeclaration",
                      "scope": 2283,
                      "src": "21771:12:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 2229,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "21771:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2232,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 2231,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "21786:1:3",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21771:16:3"
                },
                {
                  "body": {
                    "id": 2280,
                    "nodeType": "Block",
                    "src": "21884:532:3",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "id": 2249,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "21902:47:3",
                          "subExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2244,
                                  "name": "payment",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2217,
                                  "src": "21919:7:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                                    "typeString": "struct Finance.Payment storage pointer"
                                  }
                                },
                                "id": 2245,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "token",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 957,
                                "src": "21919:13:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2246,
                                  "name": "payment",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2217,
                                  "src": "21934:7:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                                    "typeString": "struct Finance.Payment storage pointer"
                                  }
                                },
                                "id": 2247,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "amount",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 965,
                                "src": "21934:14:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 2243,
                              "name": "_canMakePayment",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2580,
                              "src": "21903:15:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
                                "typeString": "function (address,uint256) view returns (bool)"
                              }
                            },
                            "id": 2248,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21903:46:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 2256,
                        "nodeType": "IfStatement",
                        "src": "21898:141:3",
                        "trueBody": {
                          "id": 2255,
                          "nodeType": "Block",
                          "src": "21951:88:3",
                          "statements": [
                            {
                              "eventCall": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 2251,
                                    "name": "_paymentId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2213,
                                    "src": "21989:10:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 2250,
                                  "name": "PaymentFailure",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1094,
                                  "src": "21974:14:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256)"
                                  }
                                },
                                "id": 2252,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "21974:26:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2253,
                              "nodeType": "EmitStatement",
                              "src": "21969:31:3"
                            },
                            {
                              "expression": null,
                              "functionReturnParameters": 2215,
                              "id": 2254,
                              "nodeType": "Return",
                              "src": "22018:7:3"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2261,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2257,
                              "name": "payment",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2217,
                              "src": "22131:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                                "typeString": "struct Finance.Payment storage pointer"
                              }
                            },
                            "id": 2259,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "repeats",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 973,
                            "src": "22131:15:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 2260,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "22150:1:3",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "22131:20:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "id": 2262,
                        "nodeType": "ExpressionStatement",
                        "src": "22131:20:3"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2265,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2263,
                            "name": "payed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2230,
                            "src": "22165:5:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 2264,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "22174:1:3",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "22165:10:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "id": 2266,
                        "nodeType": "ExpressionStatement",
                        "src": "22165:10:3"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2268,
                                "name": "payment",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2217,
                                "src": "22231:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                                  "typeString": "struct Finance.Payment storage pointer"
                                }
                              },
                              "id": 2269,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "token",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 957,
                              "src": "22231:13:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2270,
                                "name": "payment",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2217,
                                "src": "22262:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                                  "typeString": "struct Finance.Payment storage pointer"
                                }
                              },
                              "id": 2271,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "receiver",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 959,
                              "src": "22262:16:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2272,
                                "name": "payment",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2217,
                                "src": "22296:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                                  "typeString": "struct Finance.Payment storage pointer"
                                }
                              },
                              "id": 2273,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "amount",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 965,
                              "src": "22296:14:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2274,
                              "name": "_paymentId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2213,
                              "src": "22328:10:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2275,
                                "name": "payment",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2217,
                                "src": "22356:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Payment_$974_storage_ptr",
                                  "typeString": "struct Finance.Payment storage pointer"
                                }
                              },
                              "id": 2276,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "repeats",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 973,
                              "src": "22356:15:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "",
                              "id": 2277,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "22389:2:3",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              },
                              "value": ""
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              }
                            ],
                            "id": 2267,
                            "name": "_makePaymentTransaction",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2326,
                            "src": "22190:23:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint64_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256,uint64,string memory)"
                            }
                          },
                          "id": 2278,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22190:215:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2279,
                        "nodeType": "ExpressionStatement",
                        "src": "22190:215:3"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 2242,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "id": 2238,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2234,
                            "name": "_paymentId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2213,
                            "src": "21820:10:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 2233,
                          "name": "nextPaymentTime",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2004,
                          "src": "21804:15:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint64_$",
                            "typeString": "function (uint256) view returns (uint64)"
                          }
                        },
                        "id": 2235,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21804:27:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 2236,
                          "name": "getTimestamp64",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8868,
                          "src": "21835:14:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                            "typeString": "function () view returns (uint64)"
                          }
                        },
                        "id": 2237,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21835:16:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "src": "21804:47:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2241,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2239,
                        "name": "payed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2230,
                        "src": "21855:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 2240,
                        "name": "MAX_PAYMENTS_PER_TX",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 889,
                        "src": "21863:19:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "21855:27:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "21804:78:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2281,
                  "nodeType": "WhileStatement",
                  "src": "21797:619:3"
                }
              ]
            },
            "documentation": null,
            "id": 2283,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_executePayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2214,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2213,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 2283,
                  "src": "21615:18:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2212,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21615:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21614:20:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 2215,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "21644:0:3"
            },
            "scope": 2645,
            "src": "21590:832:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2325,
              "nodeType": "Block",
              "src": "22656:344:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2303,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2300,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2285,
                              "src": "22694:6:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 2299,
                            "name": "_getRemainingBudget",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2626,
                            "src": "22674:19:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view returns (uint256)"
                            }
                          },
                          "id": 2301,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22674:27:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2302,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2289,
                          "src": "22705:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "22674:38:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2304,
                        "name": "ERROR_REMAINING_BUDGET",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 955,
                        "src": "22714:22:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 2298,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "22666:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2305,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22666:71:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2306,
                  "nodeType": "ExpressionStatement",
                  "src": "22666:71:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 2308,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "22779:5:3",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      },
                      {
                        "argumentTypes": null,
                        "id": 2309,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2285,
                        "src": "22798:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2310,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2287,
                        "src": "22818:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2311,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2289,
                        "src": "22841:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2312,
                        "name": "_paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2291,
                        "src": "22862:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2313,
                        "name": "_paymentRepeatNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2293,
                        "src": "22886:20:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2314,
                        "name": "_reference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2295,
                        "src": "22920:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 2307,
                      "name": "_recordTransaction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2490,
                      "src": "22747:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bool_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint64_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,address,address,uint256,uint256,uint64,string memory)"
                      }
                    },
                    "id": 2315,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22747:193:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2316,
                  "nodeType": "ExpressionStatement",
                  "src": "22747:193:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2320,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2285,
                        "src": "22966:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2321,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2287,
                        "src": "22974:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2322,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2289,
                        "src": "22985:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2317,
                        "name": "vault",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1022,
                        "src": "22951:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vault_$4917",
                          "typeString": "contract Vault"
                        }
                      },
                      "id": 2319,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4825,
                      "src": "22951:14:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256) external"
                      }
                    },
                    "id": 2323,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22951:42:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2324,
                  "nodeType": "ExpressionStatement",
                  "src": "22951:42:3"
                }
              ]
            },
            "documentation": null,
            "id": 2326,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_makePaymentTransaction",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2296,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2285,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2326,
                  "src": "22470:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2284,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "22470:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2287,
                  "name": "_receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 2326,
                  "src": "22494:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2286,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "22494:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2289,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2326,
                  "src": "22521:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2288,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22521:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2291,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 2326,
                  "src": "22546:18:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2290,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22546:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2293,
                  "name": "_paymentRepeatNumber",
                  "nodeType": "VariableDeclaration",
                  "scope": 2326,
                  "src": "22574:27:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 2292,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "22574:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2295,
                  "name": "_reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 2326,
                  "src": "22611:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2294,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "22611:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22460:174:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 2297,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "22656:0:3"
            },
            "scope": 2645,
            "src": "22428:572:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2347,
              "nodeType": "Block",
              "src": "23170:275:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "74727565",
                        "id": 2338,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "23212:4:3",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "argumentTypes": null,
                        "id": 2339,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2328,
                        "src": "23254:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2340,
                        "name": "_sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2330,
                        "src": "23274:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2341,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2332,
                        "src": "23295:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2342,
                        "name": "NO_PAYMENT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 883,
                        "src": "23316:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 2343,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "23377:1:3",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "id": 2344,
                        "name": "_reference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2334,
                        "src": "23418:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 2337,
                      "name": "_recordTransaction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2490,
                      "src": "23180:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bool_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint64_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,address,address,uint256,uint256,uint64,string memory)"
                      }
                    },
                    "id": 2345,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23180:258:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2346,
                  "nodeType": "ExpressionStatement",
                  "src": "23180:258:3"
                }
              ]
            },
            "documentation": null,
            "id": 2348,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_recordIncomingTransaction",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2335,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2328,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2348,
                  "src": "23051:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2327,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "23051:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2330,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 2348,
                  "src": "23075:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2329,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "23075:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2332,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2348,
                  "src": "23100:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2331,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23100:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2334,
                  "name": "_reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 2348,
                  "src": "23125:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2333,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "23125:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23041:107:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 2336,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "23170:0:3"
            },
            "scope": 2645,
            "src": "23006:439:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2489,
              "nodeType": "Block",
              "src": "23696:1084:3",
              "statements": [
                {
                  "assignments": [
                    2366
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2366,
                      "name": "periodId",
                      "nodeType": "VariableDeclaration",
                      "scope": 2490,
                      "src": "23706:15:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 2365,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "23706:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2369,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 2367,
                      "name": "_currentPeriodId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2636,
                      "src": "23724:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                        "typeString": "function () view returns (uint64)"
                      }
                    },
                    "id": 2368,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23724:18:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23706:36:3"
                },
                {
                  "assignments": [
                    2371
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2371,
                      "name": "tokenStatement",
                      "nodeType": "VariableDeclaration",
                      "scope": 2490,
                      "src": "23752:37:3",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TokenStatement_$996_storage_ptr",
                        "typeString": "struct Finance.TokenStatement"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2370,
                        "name": "TokenStatement",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 996,
                        "src": "23752:14:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenStatement_$996_storage_ptr",
                          "typeString": "struct Finance.TokenStatement"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2378,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2372,
                          "name": "periods",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1040,
                          "src": "23792:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$1009_storage_$",
                            "typeString": "mapping(uint64 => struct Finance.Period storage ref)"
                          }
                        },
                        "id": 2374,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 2373,
                          "name": "periodId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2366,
                          "src": "23800:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "23792:17:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$1009_storage",
                          "typeString": "struct Finance.Period storage ref"
                        }
                      },
                      "id": 2375,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "tokenStatement",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1008,
                      "src": "23792:32:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TokenStatement_$996_storage_$",
                        "typeString": "mapping(address => struct Finance.TokenStatement storage ref)"
                      }
                    },
                    "id": 2377,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 2376,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2352,
                      "src": "23825:6:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "23792:40:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TokenStatement_$996_storage",
                      "typeString": "struct Finance.TokenStatement storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23752:80:3"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 2379,
                    "name": "_incoming",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2350,
                    "src": "23846:9:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 2401,
                    "nodeType": "Block",
                    "src": "23946:87:3",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2399,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2391,
                              "name": "tokenStatement",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2371,
                              "src": "23960:14:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TokenStatement_$996_storage_ptr",
                                "typeString": "struct Finance.TokenStatement storage pointer"
                              }
                            },
                            "id": 2393,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "expenses",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 993,
                            "src": "23960:23:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 2397,
                                "name": "_amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2356,
                                "src": "24014:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2394,
                                  "name": "tokenStatement",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2371,
                                  "src": "23986:14:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TokenStatement_$996_storage_ptr",
                                    "typeString": "struct Finance.TokenStatement storage pointer"
                                  }
                                },
                                "id": 2395,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "expenses",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 993,
                                "src": "23986:23:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2396,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 11689,
                              "src": "23986:27:3",
                              "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": 2398,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "23986:36:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "23960:62:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2400,
                        "nodeType": "ExpressionStatement",
                        "src": "23960:62:3"
                      }
                    ]
                  },
                  "id": 2402,
                  "nodeType": "IfStatement",
                  "src": "23842:191:3",
                  "trueBody": {
                    "id": 2390,
                    "nodeType": "Block",
                    "src": "23857:83:3",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2388,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2380,
                              "name": "tokenStatement",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2371,
                              "src": "23871:14:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TokenStatement_$996_storage_ptr",
                                "typeString": "struct Finance.TokenStatement storage pointer"
                              }
                            },
                            "id": 2382,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "income",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 995,
                            "src": "23871:21:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 2386,
                                "name": "_amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2356,
                                "src": "23921:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2383,
                                  "name": "tokenStatement",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2371,
                                  "src": "23895:14:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TokenStatement_$996_storage_ptr",
                                    "typeString": "struct Finance.TokenStatement storage pointer"
                                  }
                                },
                                "id": 2384,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "income",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 995,
                                "src": "23895:21:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2385,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 11689,
                              "src": "23895:25:3",
                              "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": 2387,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "23895:34:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "23871:58:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2389,
                        "nodeType": "ExpressionStatement",
                        "src": "23871:58:3"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2404
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2404,
                      "name": "transactionId",
                      "nodeType": "VariableDeclaration",
                      "scope": 2490,
                      "src": "24043:21:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2403,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "24043:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2407,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 2406,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "++",
                    "prefix": false,
                    "src": "24067:23:3",
                    "subExpression": {
                      "argumentTypes": null,
                      "id": 2405,
                      "name": "transactionsNextIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1036,
                      "src": "24067:21:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24043:47:3"
                },
                {
                  "assignments": [
                    2409
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2409,
                      "name": "transaction",
                      "nodeType": "VariableDeclaration",
                      "scope": 2490,
                      "src": "24100:31:3",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                        "typeString": "struct Finance.Transaction"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2408,
                        "name": "Transaction",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 991,
                        "src": "24100:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2413,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 2410,
                      "name": "transactions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1034,
                      "src": "24134:12:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Transaction_$991_storage_$",
                        "typeString": "mapping(uint256 => struct Finance.Transaction storage ref)"
                      }
                    },
                    "id": 2412,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 2411,
                      "name": "transactionId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2404,
                      "src": "24147:13:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "24134:27:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Transaction_$991_storage",
                      "typeString": "struct Finance.Transaction storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24100:61:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2418,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2414,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2409,
                        "src": "24171:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 2416,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "token",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 976,
                      "src": "24171:17:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2417,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2352,
                      "src": "24191:6:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "24171:26:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 2419,
                  "nodeType": "ExpressionStatement",
                  "src": "24171:26:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2424,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2420,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2409,
                        "src": "24207:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 2422,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "entity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 978,
                      "src": "24207:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2423,
                      "name": "_entity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2354,
                      "src": "24228:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "24207:28:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 2425,
                  "nodeType": "ExpressionStatement",
                  "src": "24207:28:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2430,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2426,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2409,
                        "src": "24245:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 2428,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "isIncoming",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 980,
                      "src": "24245:22:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2429,
                      "name": "_incoming",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2350,
                      "src": "24270:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "24245:34:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2431,
                  "nodeType": "ExpressionStatement",
                  "src": "24245:34:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2436,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2432,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2409,
                        "src": "24289:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 2434,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 982,
                      "src": "24289:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2435,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2356,
                      "src": "24310:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "24289:28:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2437,
                  "nodeType": "ExpressionStatement",
                  "src": "24289:28:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2442,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2438,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2409,
                        "src": "24327:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 2440,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "paymentId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 984,
                      "src": "24327:21:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2441,
                      "name": "_paymentId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2358,
                      "src": "24351:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "24327:34:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2443,
                  "nodeType": "ExpressionStatement",
                  "src": "24327:34:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2448,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2444,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2409,
                        "src": "24371:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 2446,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "paymentRepeatNumber",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 986,
                      "src": "24371:31:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2447,
                      "name": "_paymentRepeatNumber",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2360,
                      "src": "24405:20:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "24371:54:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 2449,
                  "nodeType": "ExpressionStatement",
                  "src": "24371:54:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2455,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2450,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2409,
                        "src": "24435:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 2452,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "date",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 988,
                      "src": "24435:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 2453,
                        "name": "getTimestamp64",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8868,
                        "src": "24454:14:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                          "typeString": "function () view returns (uint64)"
                        }
                      },
                      "id": 2454,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "24454:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "24435:35:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 2456,
                  "nodeType": "ExpressionStatement",
                  "src": "24435:35:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2461,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2457,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2409,
                        "src": "24480:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$991_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 2459,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "periodId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 990,
                      "src": "24480:20:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2460,
                      "name": "periodId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2366,
                      "src": "24503:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "24480:31:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 2462,
                  "nodeType": "ExpressionStatement",
                  "src": "24480:31:3"
                },
                {
                  "assignments": [
                    2464
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2464,
                      "name": "period",
                      "nodeType": "VariableDeclaration",
                      "scope": 2490,
                      "src": "24522:21:3",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                        "typeString": "struct Finance.Period"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2463,
                        "name": "Period",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 1009,
                        "src": "24522:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                          "typeString": "struct Finance.Period"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2468,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 2465,
                      "name": "periods",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1040,
                      "src": "24546:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$1009_storage_$",
                        "typeString": "mapping(uint64 => struct Finance.Period storage ref)"
                      }
                    },
                    "id": 2467,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 2466,
                      "name": "periodId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2366,
                      "src": "24554:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "24546:17:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Period_$1009_storage",
                      "typeString": "struct Finance.Period storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24522:41:3"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2472,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2469,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2464,
                        "src": "24577:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                          "typeString": "struct Finance.Period storage pointer"
                        }
                      },
                      "id": 2470,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "firstTransactionId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1002,
                      "src": "24577:25:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2471,
                      "name": "NO_TRANSACTION",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 886,
                      "src": "24606:14:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "24577:43:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2480,
                  "nodeType": "IfStatement",
                  "src": "24573:115:3",
                  "trueBody": {
                    "id": 2479,
                    "nodeType": "Block",
                    "src": "24622:66:3",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2477,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2473,
                              "name": "period",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2464,
                              "src": "24636:6:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                                "typeString": "struct Finance.Period storage pointer"
                              }
                            },
                            "id": 2475,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "firstTransactionId",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1002,
                            "src": "24636:25:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 2476,
                            "name": "transactionId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2404,
                            "src": "24664:13:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "24636:41:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2478,
                        "nodeType": "ExpressionStatement",
                        "src": "24636:41:3"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2482,
                        "name": "transactionId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2404,
                        "src": "24718:13:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2483,
                        "name": "_incoming",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2350,
                        "src": "24733:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2484,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2354,
                        "src": "24744:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2485,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2356,
                        "src": "24753:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2486,
                        "name": "_reference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2362,
                        "src": "24762:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 2481,
                      "name": "NewTransaction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1080,
                      "src": "24703:14:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_bool_$_t_address_$_t_uint256_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (uint256,bool,address,uint256,string memory)"
                      }
                    },
                    "id": 2487,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24703:70:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2488,
                  "nodeType": "EmitStatement",
                  "src": "24698:75:3"
                }
              ]
            },
            "documentation": null,
            "id": 2490,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_recordTransaction",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2363,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2350,
                  "name": "_incoming",
                  "nodeType": "VariableDeclaration",
                  "scope": 2490,
                  "src": "23488:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2349,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "23488:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2352,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2490,
                  "src": "23512:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2351,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "23512:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2354,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 2490,
                  "src": "23536:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2353,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "23536:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2356,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2490,
                  "src": "23561:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2355,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23561:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2358,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 2490,
                  "src": "23586:18:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2357,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23586:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2360,
                  "name": "_paymentRepeatNumber",
                  "nodeType": "VariableDeclaration",
                  "scope": 2490,
                  "src": "23614:27:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 2359,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "23614:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2362,
                  "name": "_reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 2490,
                  "src": "23651:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2361,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "23651:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23478:196:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 2364,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "23696:0:3"
            },
            "scope": 2645,
            "src": "23451:1329:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2556,
              "nodeType": "Block",
              "src": "24883:976:3",
              "statements": [
                {
                  "assignments": [
                    2498
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2498,
                      "name": "currentPeriod",
                      "nodeType": "VariableDeclaration",
                      "scope": 2557,
                      "src": "24893:28:3",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                        "typeString": "struct Finance.Period"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2497,
                        "name": "Period",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 1009,
                        "src": "24893:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                          "typeString": "struct Finance.Period"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2503,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 2499,
                      "name": "periods",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1040,
                      "src": "24924:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$1009_storage_$",
                        "typeString": "mapping(uint64 => struct Finance.Period storage ref)"
                      }
                    },
                    "id": 2502,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 2500,
                        "name": "_currentPeriodId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2636,
                        "src": "24932:16:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                          "typeString": "function () view returns (uint64)"
                        }
                      },
                      "id": 2501,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "24932:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "24924:27:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Period_$1009_storage",
                      "typeString": "struct Finance.Period storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24893:58:3"
                },
                {
                  "assignments": [
                    2505
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2505,
                      "name": "timestamp",
                      "nodeType": "VariableDeclaration",
                      "scope": 2557,
                      "src": "24961:16:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 2504,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "24961:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2508,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 2506,
                      "name": "getTimestamp64",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8868,
                      "src": "24980:14:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                        "typeString": "function () view returns (uint64)"
                      }
                    },
                    "id": 2507,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24980:16:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24961:35:3"
                },
                {
                  "body": {
                    "id": 2552,
                    "nodeType": "Block",
                    "src": "25092:739:3",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2515,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2513,
                            "name": "_maxTransitions",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2492,
                            "src": "25110:15:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 2514,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "25129:1:3",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "25110:20:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 2519,
                        "nodeType": "IfStatement",
                        "src": "25106:215:3",
                        "trueBody": {
                          "id": 2518,
                          "nodeType": "Block",
                          "src": "25132:189:3",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "hexValue": "66616c7365",
                                "id": 2516,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "25301:5:3",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              "functionReturnParameters": 2496,
                              "id": 2517,
                              "nodeType": "Return",
                              "src": "25294:12:3"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2525,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2520,
                            "name": "_maxTransitions",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2492,
                            "src": "25334:15:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 2523,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "25372:1:3",
                                "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"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 2521,
                                "name": "_maxTransitions",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2492,
                                "src": "25352:15:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2522,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 11664,
                              "src": "25352:19:3",
                              "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": 2524,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "25352:22:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "25334:40:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2526,
                        "nodeType": "ExpressionStatement",
                        "src": "25334:40:3"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2530,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2527,
                              "name": "currentPeriod",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2498,
                              "src": "25554:13:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                                "typeString": "struct Finance.Period storage pointer"
                              }
                            },
                            "id": 2528,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "firstTransactionId",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1002,
                            "src": "25554:32:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2529,
                            "name": "NO_TRANSACTION",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 886,
                            "src": "25590:14:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "25554:50:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 2541,
                        "nodeType": "IfStatement",
                        "src": "25550:151:3",
                        "trueBody": {
                          "id": 2540,
                          "nodeType": "Block",
                          "src": "25606:95:3",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 2538,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2531,
                                    "name": "currentPeriod",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2498,
                                    "src": "25624:13:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                                      "typeString": "struct Finance.Period storage pointer"
                                    }
                                  },
                                  "id": 2533,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "lastTransactionId",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1004,
                                  "src": "25624:31:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "31",
                                      "id": 2536,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "25684:1:3",
                                      "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"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2534,
                                      "name": "transactionsNextIndex",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1036,
                                      "src": "25658:21:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 2535,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sub",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 11664,
                                    "src": "25658:25:3",
                                    "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": 2537,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "25658:28:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "25624:62:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2539,
                              "nodeType": "ExpressionStatement",
                              "src": "25624:62:3"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2550,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2542,
                            "name": "currentPeriod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2498,
                            "src": "25764:13:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                              "typeString": "struct Finance.Period storage pointer"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 2547,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "25817:1:3",
                                    "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"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2544,
                                      "name": "currentPeriod",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2498,
                                      "src": "25791:13:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                                        "typeString": "struct Finance.Period storage pointer"
                                      }
                                    },
                                    "id": 2545,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "endTime",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1000,
                                    "src": "25791:21:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint64",
                                      "typeString": "uint64"
                                    }
                                  },
                                  "id": 2546,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "add",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 11831,
                                  "src": "25791:25:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint64_$_t_uint64_$returns$_t_uint64_$bound_to$_t_uint64_$",
                                    "typeString": "function (uint64,uint64) pure returns (uint64)"
                                  }
                                },
                                "id": 2548,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "25791:28:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              ],
                              "id": 2543,
                              "name": "_newPeriod",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2211,
                              "src": "25780:10:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_uint64_$returns$_t_struct$_Period_$1009_storage_ptr_$",
                                "typeString": "function (uint64) returns (struct Finance.Period storage pointer)"
                              }
                            },
                            "id": 2549,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "25780:40:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                              "typeString": "struct Finance.Period storage pointer"
                            }
                          },
                          "src": "25764:56:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                            "typeString": "struct Finance.Period storage pointer"
                          }
                        },
                        "id": 2551,
                        "nodeType": "ExpressionStatement",
                        "src": "25764:56:3"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 2512,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2509,
                      "name": "timestamp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2505,
                      "src": "25057:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2510,
                        "name": "currentPeriod",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2498,
                        "src": "25069:13:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$1009_storage_ptr",
                          "typeString": "struct Finance.Period storage pointer"
                        }
                      },
                      "id": 2511,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "endTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1000,
                      "src": "25069:21:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "25057:33:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2553,
                  "nodeType": "WhileStatement",
                  "src": "25050:781:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 2554,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "25848:4:3",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 2496,
                  "id": 2555,
                  "nodeType": "Return",
                  "src": "25841:11:3"
                }
              ]
            },
            "documentation": null,
            "id": 2557,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_tryTransitionAccountingPeriod",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2493,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2492,
                  "name": "_maxTransitions",
                  "nodeType": "VariableDeclaration",
                  "scope": 2557,
                  "src": "24826:23:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2491,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24826:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24825:25:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 2496,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2495,
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 2557,
                  "src": "24869:12:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2494,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "24869:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24868:14:3"
            },
            "scope": 2645,
            "src": "24786:1073:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2579,
              "nodeType": "Block",
              "src": "25952:98:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 2577,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2570,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2567,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2559,
                            "src": "25989:6:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 2566,
                          "name": "_getRemainingBudget",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2626,
                          "src": "25969:19:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view returns (uint256)"
                          }
                        },
                        "id": 2568,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "25969:27:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 2569,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2561,
                        "src": "26000:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "25969:38:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2576,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2573,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2559,
                            "src": "26025:6:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 2571,
                            "name": "vault",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1022,
                            "src": "26011:5:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Vault_$4917",
                              "typeString": "contract Vault"
                            }
                          },
                          "id": 2572,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balance",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4851,
                          "src": "26011:13:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view external returns (uint256)"
                          }
                        },
                        "id": 2574,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "26011:21:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 2575,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2561,
                        "src": "26036:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "26011:32:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "25969:74:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2565,
                  "id": 2578,
                  "nodeType": "Return",
                  "src": "25962:81:3"
                }
              ]
            },
            "documentation": null,
            "id": 2580,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_canMakePayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2562,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2559,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2580,
                  "src": "25890:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2558,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "25890:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2561,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2580,
                  "src": "25906:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2560,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25906:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25889:33:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 2565,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2564,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2580,
                  "src": "25946:4:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2563,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "25946:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25945:6:3"
            },
            "scope": 2645,
            "src": "25865:185:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2625,
              "nodeType": "Block",
              "src": "26133:467:3",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 2591,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "26147:27:3",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2587,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1024,
                          "src": "26148:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$1020_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 2588,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hasBudget",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1019,
                        "src": "26148:18:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 2590,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2589,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2582,
                        "src": "26167:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "26148:26:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2595,
                  "nodeType": "IfStatement",
                  "src": "26143:73:3",
                  "trueBody": {
                    "id": 2594,
                    "nodeType": "Block",
                    "src": "26176:40:3",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2592,
                          "name": "MAX_UINT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 895,
                          "src": "26197:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2586,
                        "id": 2593,
                        "nodeType": "Return",
                        "src": "26190:15:3"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2597
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2597,
                      "name": "spent",
                      "nodeType": "VariableDeclaration",
                      "scope": 2626,
                      "src": "26226:13:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2596,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "26226:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2606,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 2598,
                            "name": "periods",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1040,
                            "src": "26242:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$1009_storage_$",
                              "typeString": "mapping(uint64 => struct Finance.Period storage ref)"
                            }
                          },
                          "id": 2601,
                          "indexExpression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 2599,
                              "name": "_currentPeriodId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2636,
                              "src": "26250:16:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                                "typeString": "function () view returns (uint64)"
                              }
                            },
                            "id": 2600,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "26250:18:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "26242:27:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Period_$1009_storage",
                            "typeString": "struct Finance.Period storage ref"
                          }
                        },
                        "id": 2602,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "tokenStatement",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1008,
                        "src": "26242:42:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TokenStatement_$996_storage_$",
                          "typeString": "mapping(address => struct Finance.TokenStatement storage ref)"
                        }
                      },
                      "id": 2604,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2603,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2582,
                        "src": "26285:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "26242:50:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TokenStatement_$996_storage",
                        "typeString": "struct Finance.TokenStatement storage ref"
                      }
                    },
                    "id": 2605,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "expenses",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 993,
                    "src": "26242:59:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26226:75:3"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2612,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2607,
                      "name": "spent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2597,
                      "src": "26473:5:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2608,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1024,
                          "src": "26482:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$1020_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 2609,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "budgets",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1015,
                        "src": "26482:16:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 2611,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2610,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2582,
                        "src": "26499:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "26482:24:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "26473:33:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2616,
                  "nodeType": "IfStatement",
                  "src": "26469:72:3",
                  "trueBody": {
                    "id": 2615,
                    "nodeType": "Block",
                    "src": "26508:33:3",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2613,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "26529:1:3",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 2586,
                        "id": 2614,
                        "nodeType": "Return",
                        "src": "26522:8:3"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2622,
                        "name": "spent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2597,
                        "src": "26587:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2617,
                            "name": "settings",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1024,
                            "src": "26558:8:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Settings_$1020_storage",
                              "typeString": "struct Finance.Settings storage ref"
                            }
                          },
                          "id": 2618,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "budgets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1015,
                          "src": "26558:16:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                          }
                        },
                        "id": 2620,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 2619,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2582,
                          "src": "26575:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "26558:24:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 2621,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11664,
                      "src": "26558:28:3",
                      "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": 2623,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26558:35:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2586,
                  "id": 2624,
                  "nodeType": "Return",
                  "src": "26551:42:3"
                }
              ]
            },
            "documentation": null,
            "id": 2626,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_getRemainingBudget",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2583,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2582,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2626,
                  "src": "26085:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2581,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "26085:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26084:16:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 2586,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2585,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2626,
                  "src": "26124:7:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2584,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26124:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26123:9:3"
            },
            "scope": 2645,
            "src": "26056:544:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2635,
              "nodeType": "Block",
              "src": "26665:129:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 2633,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2631,
                      "name": "periodsLength",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1042,
                      "src": "26770:13:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 2632,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26786:1:3",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "26770:17:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 2630,
                  "id": 2634,
                  "nodeType": "Return",
                  "src": "26763:24:3"
                }
              ]
            },
            "documentation": null,
            "id": 2636,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_currentPeriodId",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2627,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26631:2:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 2630,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2629,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2636,
                  "src": "26657:6:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 2628,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "26657:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26656:8:3"
            },
            "scope": 2645,
            "src": "26606:188:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2643,
              "nodeType": "Block",
              "src": "26907:22:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2641,
                    "name": "MAX_UINT64",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 901,
                    "src": "26916:10:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 2640,
                  "id": 2642,
                  "nodeType": "Return",
                  "src": "26909:17:3"
                }
              ]
            },
            "documentation": null,
            "id": 2644,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getMaxPeriodTransitions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2637,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26873:2:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 2640,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2639,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2644,
                  "src": "26899:6:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 2638,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "26899:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26898:8:3"
            },
            "scope": 2645,
            "src": "26841:88:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 2646,
        "src": "458:26473:3"
      }
    ],
    "src": "57:26875:3"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.1",
  "updatedAt": "2019-03-29T09:45:33.387Z",
  "devdoc": {
    "methods": {
      "allowRecoverability(address)": {
        "details": "Disable recovery escape hatch if the app has been initialized, as it could be used     maliciously to transfer funds in the Finance app to another Vault     finance#recoverToVault() should be used to recover funds to the Finance's vault"
      },
      "canPerform(address,bytes32,uint256[])": {
        "details": "Check whether an action can be performed by a sender for a particular role on this app",
        "params": {
          "_params": "Permission params for the role",
          "_role": "Role on this app",
          "_sender": "Sender of the call"
        },
        "return": "Boolean indicating whether the sender has the permissions to perform the action.        Always returns false if the app hasn't been initialized yet."
      },
      "currentPeriodId()": {
        "details": "We have to check for initialization as periods are only valid after initializing"
      },
      "deposit(address,uint256,string)": {
        "details": "Deposit for approved ERC20 tokens or ETH",
        "params": {
          "_amount": "Amount of tokens sent",
          "_reference": "Reason for payment",
          "_token": "Address of deposited token"
        }
      },
      "executePayment(uint256)": {
        "details": "Executes any payment (requires role)",
        "params": {
          "_paymentId": "Identifier for payment"
        }
      },
      "getInitializationBlock()": {
        "return": "Block number in which the contract was initialized"
      },
      "getRecoveryVault()": {
        "details": "Get the recovery vault for the app",
        "return": "Recovery vault address for the app"
      },
      "getRemainingBudget(address)": {
        "details": "We have to check for initialization as periods are only valid after initializing"
      },
      "hasInitialized()": {
        "return": "Whether the contract has been initialized by the time of the current block"
      },
      "initialize(address,uint64)": {
        "params": {
          "_periodDuration": "Duration in seconds of each period",
          "_vault": "Address of the vault Finance will rely on (non changeable)"
        }
      },
      "newPayment(address,address,uint256,uint64,uint64,uint64,string)": {
        "params": {
          "_amount": "Tokens that are payed every time the payment is due",
          "_initialPaymentTime": "Timestamp for when the first payment is done",
          "_interval": "Number of seconds that need to pass between payment transactions",
          "_maxRepeats": "Maximum instances a payment can be executed",
          "_receiver": "Address that will receive payment",
          "_reference": "String detailing payment reason",
          "_token": "Address of token for payment"
        }
      },
      "receiverExecutePayment(uint256)": {
        "details": "Always allows receiver of a payment to trigger execution",
        "params": {
          "_paymentId": "Identifier for payment"
        }
      },
      "recoverToVault(address)": {
        "details": "Allows making a simple payment from this contract to the Vault, to avoid locked tokens.     This contract should never receive tokens with a simple transfer call, but in case it     happens, this function allows for their recovery.",
        "params": {
          "_token": "Token whose balance is going to be transferred."
        }
      },
      "removeBudget(address)": {
        "params": {
          "_token": "Address for token"
        }
      },
      "setBudget(address,uint256)": {
        "params": {
          "_amount": "New budget amount",
          "_token": "Address for token"
        }
      },
      "setPaymentStatus(uint256,bool)": {
        "details": "Note that we do not require this action to transition periods, as it doesn't directly     impact any accounting periods.     Not having to transition periods also makes disabling payments easier to prevent funds     from being pulled out in the event of a breach.",
        "params": {
          "_active": "Whether it will be active or inactive",
          "_paymentId": "Identifier for payment"
        }
      },
      "setPeriodDuration(uint64)": {
        "params": {
          "_periodDuration": "Duration in seconds for accounting periods"
        }
      },
      "transferToVault(address)": {
        "params": {
          "_token": "Token balance to be sent to recovery vault."
        }
      },
      "tryTransitionAccountingPeriod(uint64)": {
        "details": "Transitions accounting periods if needed. For preventing OOG attacks, a maxTransitions     param is provided. If more than the specified number of periods need to be transitioned,     it will return false.",
        "params": {
          "_maxTransitions": "Maximum periods that can be transitioned"
        },
        "return": "success Boolean indicating whether the accounting period is the correct one (if false,                maxTransitions was surpased and another call is needed)"
      }
    }
  },
  "userdoc": {
    "methods": {
      "deposit(address,uint256,string)": {
        "notice": "Deposit `@tokenAmount(_token, _amount)`"
      },
      "executePayment(uint256)": {
        "notice": "Execute pending payment #`_paymentId`"
      },
      "initialize(address,uint64)": {
        "notice": "Initialize Finance app for Vault at `_vault` with period length of `@transformTime(_periodDuration)`"
      },
      "newPayment(address,address,uint256,uint64,uint64,uint64,string)": {
        "notice": "Create a new payment of `@tokenAmount(_token, _amount)` to `_receiver``_maxRepeats > 0 ? ', executing ' + _maxRepeats + ' times at intervals of ' + @transformTime(_interval) : ''`"
      },
      "receiverExecutePayment(uint256)": {
        "notice": "Execute pending payment #`_paymentId`"
      },
      "recoverToVault(address)": {
        "notice": "Send tokens held in this contract to the Vault"
      },
      "removeBudget(address)": {
        "notice": "Remove spending limit for `_token.symbol(): string`, effective immediately"
      },
      "setBudget(address,uint256)": {
        "notice": "Set budget for `_token.symbol(): string` to `@tokenAmount(_token, _amount, false)`, effective immediately"
      },
      "setPaymentStatus(uint256,bool)": {
        "notice": "`_active ? 'Activate' : 'Disable'` payment #`_paymentId`"
      },
      "setPeriodDuration(uint64)": {
        "notice": "Change period duration to `@transformTime(_periodDuration)`, effective for next accounting period"
      },
      "transferToVault(address)": {
        "notice": "Send funds to recovery Vault. This contract should never receive funds,        but in case it does, this function allows one to recover them."
      },
      "tryTransitionAccountingPeriod(uint64)": {
        "notice": "Transition accounting period if needed"
      }
    }
  }
}