{
  "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": "maxExecutions",
          "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": "active",
          "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"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "vault",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "RecoverToVault",
      "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": "_reference",
          "type": "string"
        }
      ],
      "name": "newImmediatePayment",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "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": "_maxExecutions",
          "type": "uint64"
        },
        {
          "name": "_reference",
          "type": "string"
        }
      ],
      "name": "newScheduledPayment",
      "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": "maxExecutions",
          "type": "uint64"
        },
        {
          "name": "inactive",
          "type": "bool"
        },
        {
          "name": "executions",
          "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": "paymentExecutionNumber",
          "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": "currentPeriodId",
      "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": "_token",
          "type": "address"
        },
        {
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "canMakePayment",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "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"
    }
  ],
  "bytecode": "0x6080604052620000176401000000006200001d810204565b6200023b565b6200003064010000000062000125810204565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a45440000000000000000602082015290156200010c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620000d0578181015183820152602001620000b6565b50505050905090810190601f168015620000fe5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506200012360001964010000000062000154810204565b565b60006200014f60008051602062005d3c83398151915264010000000062004ec16200023382021704565b905090565b6200016764010000000062000125810204565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a454400000000000000006020820152901562000206576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015620000d0578181015183820152602001620000b6565b506200023060008051602062005d3c833981519152826401000000006200589b6200023782021704565b50565b5490565b9055565b615af1806200024b6000396000f3006080604052600436106102035763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630803fac0811461047e5780630842ace4146104a757806314920438146104ce578063162a0cf8146105305780631798de811461054a57806318f053da1461058557806319b7d7bd146105b35780632914b9bd146105fa5780632d00cad31461067c5780633280a8361461069957806332f0a3b51461072457806333ea3dc8146107395780635985feec146107ba5780635b14dbc8146107cf5780636436f189146107e457806367047c4a146107fc578063671273f4146108585780636abe602d1461087a57806374bfb426146108ac5780637e7db6e1146108dd57806380afdea81461090b5780638b3dd749146109205780639297d86014610935578063981cc34214610963578063988e6595146109785780639d4941d81461098d578063a1658fad146109bb578063a479e50814610a2f578063a662944114610a44578063b36fec5714610a66578063bfe07da614610a7b578063cb045a9614610aac578063d2d27b4114610ac4578063d4aae0c414610b18578063de048a7b14610b2d578063de4796ed14610b42578063e90a1b6e14610b57578063e94ebac514610b88578063eaa7ec6814610b9d578063eca8181714610bb2578063f636484614610be0578063fbfa77cf14610c26575b61020b610c3b565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a454400000000000000000000000060208201529015156102e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156102a9578181015183820152602001610291565b50505050905090810190601f1680156102d65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060006102f76102f2610c64565b610c6a565b60408051808201909152601b81527f46494e414e43455f434f4d504c4554455f5452414e534954494f4e00000000006020820152909150811515610397576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5060408051808201909152601b81527f46494e414e43455f4445504f5349545f414d4f554e545f5a45524f0000000000602082015260003411610436576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5061047b6000346040805190810160405280601d81526020017f4574686572207472616e7366657220746f2046696e616e636520617070000000815250336001610d51565b50005b34801561048a57600080fd5b50610493610c3b565b604080519115158252519081900360200190f35b3480156104b357600080fd5b506104bc611043565b60408051918252519081900360200190f35b3480156104da57600080fd5b506104bc73ffffffffffffffffffffffffffffffffffffffff6004803582169160248035909116916044359167ffffffffffffffff60643581169260843582169260a4359092169160c435908101910135611078565b34801561053c57600080fd5b506105486004356117f1565b005b34801561055657600080fd5b5061054873ffffffffffffffffffffffffffffffffffffffff6004351667ffffffffffffffff60243516611a50565b34801561059157600080fd5b5061054873ffffffffffffffffffffffffffffffffffffffff60043516611d45565b3480156105bf57600080fd5b506105e173ffffffffffffffffffffffffffffffffffffffff60043516611fb8565b6040805192835290151560208301528051918290030190f35b34801561060657600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261065394369492936024939284019190819084018382808284375094975061209e9650505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561068857600080fd5b5061054860043560243515156121aa565b3480156106a557600080fd5b506106b16004356123e4565b6040805173ffffffffffffffffffffffffffffffffffffffff9a8b168152988a1660208a01528881019790975267ffffffffffffffff9586166060890152938516608088015291841660a0870152151560c086015290911660e08401529092166101008201529051908190036101200190f35b34801561073057600080fd5b50610653612568565b34801561074557600080fd5b50610751600435612606565b6040805167ffffffffffffffff998a168152602081019890985287810196909652938716606087015273ffffffffffffffffffffffffffffffffffffffff9283166080870152911660a0850152151560c084015290921660e08201529051908190036101000190f35b3480156107c657600080fd5b506104bc612767565b3480156107db57600080fd5b506104bc61279c565b3480156107f057600080fd5b506105486004356127d1565b34801561080857600080fd5b5061081e67ffffffffffffffff60043516612a01565b60408051951515865267ffffffffffffffff9485166020870152929093168483015260608401526080830191909152519081900360a00190f35b34801561086457600080fd5b5061054867ffffffffffffffff60043516612b22565b34801561088657600080fd5b5061088f612de1565b6040805167ffffffffffffffff9092168252519081900360200190f35b3480156108b857600080fd5b5061054873ffffffffffffffffffffffffffffffffffffffff60043516602435612df1565b3480156108e957600080fd5b5061049373ffffffffffffffffffffffffffffffffffffffff600435166130a4565b34801561091757600080fd5b506104bc6130b5565b34801561092c57600080fd5b506104bc6130e5565b34801561094157600080fd5b5061054873ffffffffffffffffffffffffffffffffffffffff60043516613110565b34801561096f57600080fd5b506104bc613395565b34801561098457600080fd5b5061088f6133ca565b34801561099957600080fd5b5061054873ffffffffffffffffffffffffffffffffffffffff6004351661347a565b3480156109c757600080fd5b50604080516020600460443581810135838102808601850190965280855261049395833573ffffffffffffffffffffffffffffffffffffffff1695602480359636969560649593949201929182918501908490808284375094975061379c9650505050505050565b348015610a3b57600080fd5b5061065361392c565b348015610a5057600080fd5b5061049367ffffffffffffffff600435166139ee565b348015610a7257600080fd5b5061088f613aa5565b6105486004803573ffffffffffffffffffffffffffffffffffffffff16906024803591604435918201910135613b5e565b348015610ab857600080fd5b5061088f600435613e4d565b348015610ad057600080fd5b50610aff67ffffffffffffffff6004351673ffffffffffffffffffffffffffffffffffffffff60243516613f11565b6040805192835260208301919091528051918290030190f35b348015610b2457600080fd5b5061065361401c565b348015610b3957600080fd5b506104bc614047565b348015610b4e57600080fd5b5061049361404d565b348015610b6357600080fd5b5061049373ffffffffffffffffffffffffffffffffffffffff60043516602435614060565b348015610b9457600080fd5b506104bc614119565b348015610ba957600080fd5b506104bc61414e565b348015610bbe57600080fd5b506104bc73ffffffffffffffffffffffffffffffffffffffff60043516614154565b348015610bec57600080fd5b5061054873ffffffffffffffffffffffffffffffffffffffff60048035821691602480359091169160443591606435908101910135614205565b348015610c3257600080fd5b5061065361448e565b600080610c466130e5565b90508015801590610c5e575080610c5b6144aa565b10155b91505090565b60001990565b600080600060086000610c7b6144ae565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000209150610ca76144c2565b90505b815467ffffffffffffffff6801000000000000000090910481169082161115610d455767ffffffffffffffff84161515610ce75760009250610d4a565b60018201546000199094019315610d1257600754610d0c90600163ffffffff6144d416565b60028301555b8154610d3e90610d399068010000000000000000900467ffffffffffffffff16600161457f565b614631565b9150610caa565b600192505b5050919050565b610d5d8583868661473f565b73ffffffffffffffffffffffffffffffffffffffff85161515610e115760008054604080517f47e7ef240000000000000000000000000000000000000000000000000000000081526004810184905260248101889052905173ffffffffffffffffffffffffffffffffffffffff909216926347e7ef24928892604480820193929182900301818588803b158015610df357600080fd5b505af1158015610e07573d6000803e3d6000fd5b505050505061103c565b8015610ee057610e3f73ffffffffffffffffffffffffffffffffffffffff861633308763ffffffff61475616565b6040805190810160405280602081526020017f46494e414e43455f544b4e5f5452414e534645525f46524f4d5f524556455254815250901515610ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b505b600054610f0d9073ffffffffffffffffffffffffffffffffffffffff87811691168663ffffffff6147f716565b60408051808201909152601a81527f46494e414e43455f544b4e5f415050524f56455f4641494c45440000000000006020820152901515610faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5060008054604080517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260248201899052915191909216926347e7ef24926044808201939182900301818387803b15801561102357600080fd5b505af1158015611037573d6000803e3d6000fd5b505050505b5050505050565b604080517f4352454154455f5041594d454e54535f524f4c450000000000000000000000008152905190819003601401902081565b60008060405180807f4352454154455f5041594d454e54535f524f4c45000000000000000000000000815250601401905060405180910390206110dd8b8b8b8a67ffffffffffffffff168a67ffffffffffffffff168d67ffffffffffffffff1661488f565b6110e833838361379c565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515611185576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5060006111936102f2610c64565b60408051808201909152601b81527f46494e414e43455f434f4d504c4554455f5452414e534954494f4e00000000006020820152909150811515611233576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5060408051808201909152601f81527f46494e414e43455f4e45575f5041594d454e545f414d4f554e545f5a45524f00602082015260008c116112d2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5060408051808201909152601f81527f46494e414e43455f4e45575f5041594d454e545f494e5452564c5f5a45524f006020820152600067ffffffffffffffff8b161161137b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5060408051808201909152601e81527f46494e414e43455f4e45575f5041594d454e545f45584543535f5a45524f00006020820152600067ffffffffffffffff8a1611611424576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5073ffffffffffffffffffffffffffffffffffffffff8d1660009081526003602052604090205460ff16158061147f575073ffffffffffffffffffffffffffffffffffffffff8d166000908152600260205260409020548b11155b60408051808201909152600e81527f46494e414e43455f425544474554000000000000000000000000000000000000602082015290151561151c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b508767ffffffffffffffff16600114156115e5576115386144c2565b60408051808201909152601d81527f46494e414e43455f4e45575f5041594d454e545f494d4d45444941544500000060208201529067ffffffffffffffff908116908c16116115e3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b505b60058054600181019091556040805167ffffffffffffffff8b1681526020810182815291810189905291965073ffffffffffffffffffffffffffffffffffffffff8e169187917f41e8c14bdf2b044354d788d944b364e1de0b64aeddeba755b8ef69ab68bd9083918c918c918c91606082018484808284376040519201829003965090945050505050a36004600086815260200190815260200160002093508c8460000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b8460010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508a8460030181905550898460040160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550888460040160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550878460040160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550338460020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506117e085614989565b505050505098975050505050505050565b604080517f455845435554455f5041594d454e54535f524f4c45000000000000000000000081528151908190036015019020600083815260046020529190912060030154611840908390614bc6565b61184b33838361379c565b60408051808201909152600f81527f4150505f415554485f4641494c4544000000000000000000000000000000000060208201529015156118e8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b50826000811180156118fb575060055481105b60408051808201909152601c81527f46494e414e43455f4e4f5f5343484544554c45445f5041594d454e54000000006020820152901515611998576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5060006119a66102f2610c64565b60408051808201909152601b81527f46494e414e43455f434f4d504c4554455f5452414e534954494f4e00000000006020820152909150811515611a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5061103c85614c21565b611a586130e5565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a4544000000000000000060208201529015611af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b50611afd614d8b565b611b0682614e6a565b60408051808201909152601a81527f46494e414e43455f5641554c545f4e4f545f434f4e54524143540000000000006020820152901515611ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b50600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905560408051808201909152601c81527f46494e414e43455f5345545f504552494f445f544f4f5f53484f52540000000060208201526201518067ffffffffffffffff83161015611c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b506001805467ffffffffffffffff83167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009091161781556000805260046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ee80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556005819055600755611d40610d396144c2565b505050565b604080517f4348414e47455f425544474554535f524f4c45000000000000000000000000008152815190819003601301902073ffffffffffffffffffffffffffffffffffffffff8316600090815260026020908152838220546003909152928120549192611dca928592919060ff16611dbf576000611dc2565b60015b60ff16614e9d565b611dd533838361379c565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515611e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b506000611e806102f2610c64565b60408051808201909152601b81527f46494e414e43455f434f4d504c4554455f5452414e534954494f4e00000000006020820152909150811515611f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5073ffffffffffffffffffffffffffffffffffffffff841660008181526002602090815260408083208390556003825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905580518381529182019290925281517f6e768d8fe4a1460cae6d5af9382c3e9abbc41f66f2ec91fda24b12e3c2796f03929181900390910190a250505050565b600080611fc3610c3b565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a45440000000000000000000000006020820152901515612060576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b50505073ffffffffffffffffffffffffffffffffffffffff16600090815260026020908152604080832054600390925290912054909160ff90911690565b60006120a861392c565b73ffffffffffffffffffffffffffffffffffffffff166304bf2a7f836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561212c578181015183820152602001612114565b50505050905090810190601f1680156121595780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b15801561217857600080fd5b505af115801561218c573d6000803e3d6000fd5b505050506040513d60208110156121a257600080fd5b505192915050565b604080517f4d414e4147455f5041594d454e54535f524f4c45000000000000000000000000815290519081900360140190206121f783836121ec5760006121ef565b60015b60ff16614bc6565b61220233838361379c565b60408051808201909152600f81527f4150505f415554485f4641494c45440000000000000000000000000000000000602082015290151561229f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b50836000811180156122b2575060055481105b60408051808201909152601c81527f46494e414e43455f4e4f5f5343484544554c45445f5041594d454e5400000000602082015290151561234f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5060008581526004602090815260409182902060020180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16871574010000000000000000000000000000000000000000810291909117909155825190158152915187927faca91836ee6e44bf1c422f7ee89afb243a4fb775d9fe87150ff5f8e566dc161292908290030190a25050505050565b6000806000806000806000806000808a600081118015612405575060055481105b60408051808201909152601c81527f46494e414e43455f4e4f5f5343484544554c45445f5041594d454e540000000060208201529015156124a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5050506000998a5250506004602081905260409098208054600182015460038301549a83015460029093015473ffffffffffffffffffffffffffffffffffffffff9283169c9183169b9a5067ffffffffffffffff8085169a506801000000000000000085048116995070010000000000000000000000000000000085048116985060ff7401000000000000000000000000000000000000000083041697507801000000000000000000000000000000000000000000000000909404909316945091169150565b600061257261401c565b73ffffffffffffffffffffffffffffffffffffffff166332f0a3b56040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156125d557600080fd5b505af11580156125e9573d6000803e3d6000fd5b505050506040513d60208110156125ff57600080fd5b5051905090565b600080600080600080600080600089600081118015612626575060075481105b60408051808201909152601681527f46494e414e43455f4e4f5f5452414e53414354494f4e0000000000000000000060208201529015156126c3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b50505060009889525050600660205250506040909420805460018201546004830154600284015460039094015467ffffffffffffffff700100000000000000000000000000000000830481169a959950909750808216965073ffffffffffffffffffffffffffffffffffffffff9384169550928216937401000000000000000000000000000000000000000090920460ff1692680100000000000000009091041690565b604080517f4348414e47455f504552494f445f524f4c4500000000000000000000000000008152905190819003601201902081565b604080517f4348414e47455f425544474554535f524f4c45000000000000000000000000008152905190819003601301902081565b806000811180156127e3575060055481105b60408051808201909152601c81527f46494e414e43455f4e4f5f5343484544554c45445f5041594d454e54000000006020820152901515612880576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b50600061288e6102f2610c64565b60408051808201909152601b81527f46494e414e43455f434f4d504c4554455f5452414e534954494f4e0000000000602082015290915081151561292e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b50600083815260046020908152604091829020600101548251808401909352601883527f46494e414e43455f5041594d454e545f524543454956455200000000000000009183019190915273ffffffffffffffffffffffffffffffffffffffff1633146129f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b50611d4083614c21565b60095460408051808201909152601181527f46494e414e43455f4e4f5f504552494f44000000000000000000000000000000602082015260009182918291829182918291889167ffffffffffffffff90811690831610612abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5067ffffffffffffffff881660008181526008602052604090209250612ae16144ae565b8354600185015460029095015467ffffffffffffffff928316939093149b8183169b5068010000000000000000909104909116985092965094509092505050565b604080517f4348414e47455f504552494f445f524f4c45000000000000000000000000000081529051908190036012019020600154612b6e9067ffffffffffffffff8085169116614bc6565b612b7933838361379c565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515612c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b506000612c246102f2610c64565b60408051808201909152601b81527f46494e414e43455f434f4d504c4554455f5452414e534954494f4e00000000006020820152909150811515612cc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5060408051808201909152601c81527f46494e414e43455f5345545f504552494f445f544f4f5f53484f52540000000060208201526201518067ffffffffffffffff86161015612d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b506001805467ffffffffffffffff86167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909116811790915560408051918252517fa32389dd0d5a3bf7cc635f8c30fee3b70d06a6c547d6dbf31628378ee267bfc99181900360200190a150505050565b60095467ffffffffffffffff1681565b604080517f4348414e47455f425544474554535f524f4c45000000000000000000000000008152815190819003601301902073ffffffffffffffffffffffffffffffffffffffff8416600090815260026020908152838220546003909152929020549091612e6b918591859160ff16611dbf576000611dc2565b612e7633838361379c565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515612f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b506000612f216102f2610c64565b60408051808201909152601b81527f46494e414e43455f434f4d504c4554455f5452414e534954494f4e00000000006020820152909150811515612fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152600260209081526040808320879055600390915290205460ff16151561304d5773ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b6040805185815260016020820152815173ffffffffffffffffffffffffffffffffffffffff8816927f6e768d8fe4a1460cae6d5af9382c3e9abbc41f66f2ec91fda24b12e3c2796f03928290030190a25050505050565b60006130ae610c3b565b1592915050565b60006130e07fd625496217aa6a3453eecb9c3489dc5a53e6c67b444329ea2b2cbc9ff547639b614ec1565b905090565b60006130e07febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e614ec1565b600061311a610c3b565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a454400000000000000000000000060208201529015156131b7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5060006131c56102f2610c64565b60408051808201909152601b81527f46494e414e43455f434f4d504c4554455f5452414e534954494f4e00000000006020820152909150811515613265576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5073ffffffffffffffffffffffffffffffffffffffff8316156132ad576132a873ffffffffffffffffffffffffffffffffffffffff84163063ffffffff614ec916565b6132b0565b30315b60408051808201909152601b81527f46494e414e43455f5245434f5645525f414d4f554e545f5a45524f0000000000602082015290925060008311613351576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b50611d4083836040805190810160405280601081526020017f5265636f76657220746f205661756c7400000000000000000000000000000000815250306000610d51565b604080517f455845435554455f5041594d454e54535f524f4c4500000000000000000000008152905190819003601501902081565b60006133d4610c3b565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a45440000000000000000000000006020820152901515613471576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b506130e06144ae565b6000806000613488846130a4565b60408051808201909152601281527f5245434f5645525f444953414c4c4f57454400000000000000000000000000006020820152901515613525576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5061352e612568565b925061353983614e6a565b60408051808201909152601a81527f5245434f5645525f5641554c545f4e4f545f434f4e545241435400000000000060208201529015156135d6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5073ffffffffffffffffffffffffffffffffffffffff84161515613641576040513031925073ffffffffffffffffffffffffffffffffffffffff84169083156108fc029084906000818181858888f1935050505015801561363b573d6000803e3d6000fd5b50613731565b508261366973ffffffffffffffffffffffffffffffffffffffff82163063ffffffff614ec916565b915061369273ffffffffffffffffffffffffffffffffffffffff8216848463ffffffff61500216565b60408051808201909152601d81527f5245434f5645525f544f4b454e5f5452414e534645525f4641494c4544000000602082015290151561372f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b505b8373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f596caf56044b55fb8c4ca640089bbc2b63cae3e978b851f5745cbb7c5b288e02846040518082815260200191505060405180910390a350505050565b6000806137a7610c3b565b15156137b65760009150613924565b6137be61401c565b905073ffffffffffffffffffffffffffffffffffffffff811615156137e65760009150613924565b8073ffffffffffffffffffffffffffffffffffffffff1663fdef910686308761380e88615091565b6040517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff808616600483019081529085166024830152604482018490526080606483019081528351608484015283519192909160a490910190602085019080838360005b838110156138a657818101518382015260200161388e565b50505050905090810190601f1680156138d35780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1580156138f557600080fd5b505af1158015613909573d6000803e3d6000fd5b505050506040513d602081101561391f57600080fd5b505191505b509392505050565b60008061393761401c565b604080517fbe00bbd80000000000000000000000000000000000000000000000000000000081527fd6f028ca0e8edb4a8c9757ca4fdccab25fa1e0317da1188108f7d2dee14902fb60048201527fddbcfd564f642ab5627cf68b9b7d374fb4f8a36e941a75d89c87998cef03bd616024820152905173ffffffffffffffffffffffffffffffffffffffff929092169163be00bbd8916044808201926020929091908290030181600087803b15801561217857600080fd5b60006139f8610c3b565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a45440000000000000000000000006020820152901515613a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b50613a9f82610c6a565b92915050565b6000613aaf610c3b565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a45440000000000000000000000006020820152901515613b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b505060015467ffffffffffffffff1690565b613b66610c3b565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a45440000000000000000000000006020820152901515613c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b506000613c116102f2610c64565b60408051808201909152601b81527f46494e414e43455f434f4d504c4554455f5452414e534954494f4e00000000006020820152909150811515613cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5060408051808201909152601b81527f46494e414e43455f4445504f5349545f414d4f554e545f5a45524f0000000000602082015260008511613d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5073ffffffffffffffffffffffffffffffffffffffff85161515613e0d5760408051808201909152601a81527f46494e414e43455f4554485f56414c55455f4d49534d415443480000000000006020820152348514613e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b505b61103c858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050336001610d51565b600081600081118015613e61575060055481105b60408051808201909152601c81527f46494e414e43455f4e4f5f5343484544554c45445f5041594d454e54000000006020820152901515613efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b50613f088361509b565b91505b50919050565b60095460408051808201909152601181527f46494e414e43455f4e4f5f504552494f4400000000000000000000000000000060208201526000918291829186919067ffffffffffffffff90811690831610613fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5050505067ffffffffffffffff92909216600090815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff949094168352600390930190522080546001909101549092909150565b60006130e07f4172f0f7d2289153072b0a6ca36959e0cbe2efc3afe50fc81636caa96338137b614ec1565b60055481565b600060001961405a6130e5565b14905090565b600061406a610c3b565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a45440000000000000000000000006020820152901515614107576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b506141128383615164565b9392505050565b604080517f4d414e4147455f5041594d454e54535f524f4c450000000000000000000000008152905190819003601401902081565b60075481565b600061415e610c3b565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a454400000000000000000000000060208201529015156141fb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b50613a9f82615228565b604080517f4352454154455f5041594d454e54535f524f4c450000000000000000000000008152905190819003601401902061424f868686600019600161424a6152f3565b61488f565b61425a33838361379c565b60408051808201909152600f81527f4150505f415554485f4641494c4544000000000000000000000000000000000060208201529015156142f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5060006143056102f2610c64565b60408051808201909152601b81527f46494e414e43455f434f4d504c4554455f5452414e534954494f4e000000000060208201529091508115156143a5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5060408051808201909152601f81527f46494e414e43455f4e45575f5041594d454e545f414d4f554e545f5a45524f00602082015260008711614444576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b506144848888886000808a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437506152f7945050505050565b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b4390565b60095467ffffffffffffffff166000190190565b60006130e06144cf6152f3565b6153b5565b60408051808201909152601281527f4d4154485f5355425f554e444552464c4f5700000000000000000000000000006020820152600090819084841115614577576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b505050900390565b60408051808201909152601381527f4d41544836345f4144445f4f564552464c4f570000000000000000000000000060208201526000908383019067ffffffffffffffff8086169083161015613924576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b6009805467ffffffffffffffff808216600181810183167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000948516179094556000818152600860205260408120805487851695168517815594549094919391926000199181168701919091019190821610156146ac57506000195b81547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff83811682029290921780855560408051828516815292909104831660208301528051928616927fe183df4530c4b573af76d47f020d4b86e418cef40ed4c9ce924b563e791b832c9281900390910190a28193505b505050919050565b614750600185858560008087615465565b50505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526000906147ed868261579d565b9695505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b300000000000000000000000000000000000000000000000000000000179052600090614886858261579d565b95945050505050565b60408051600680825260e082019092526060916020820160c0803883390190505090508673ffffffffffffffffffffffffffffffffffffffff168160008151811015156148d857fe5b60209081029091010152805173ffffffffffffffffffffffffffffffffffffffff8716908290600190811061490957fe5b60209081029091010152805185908290600290811061492457fe5b60209081029091010152805184908290600390811061493f57fe5b60209081029091010152805183908290600490811061495a57fe5b60209081029091010152805182908290600590811061497557fe5b602090810290910101529695505050505050565b600081815260046020908152604080832060028101548251808401909352601883527f46494e414e43455f5041594d454e545f494e4143544956450000000000000000938301939093529183919074010000000000000000000000000000000000000000900460ff1615614a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b50600090505b614a676144c2565b67ffffffffffffffff16614a7a8561509b565b67ffffffffffffffff1611158015614a9c575060148167ffffffffffffffff16105b15614bb55781546003830154614ac89173ffffffffffffffffffffffffffffffffffffffff1690615164565b1515614b06576040805185815290517f5f352e4123f4620cacbb8eb0dd683705aaa3e1f9384adbbd85b665b205097f519181900360200190a1614bb5565b60048201805467ffffffffffffffff7801000000000000000000000000000000000000000000000000808304821660019081018316820277ffffffffffffffffffffffffffffffffffffffffffffffff909416939093179384905585548684015460038801546040805160208101909152600081529790950196614bb09673ffffffffffffffffffffffffffffffffffffffff93841696929093169491938b9304909116906157eb565b614a5f565b67ffffffffffffffff169392505050565b604080516002808252606080830184529260208301908038833901905050905082816000815181101515614bf657fe5b602090810290910101528051829082906001908110614c1157fe5b6020908102909101015292915050565b6000614c2c82614989565b9050801515614d8757614c3d6144c2565b67ffffffffffffffff16614c508361509b565b67ffffffffffffffff1611614cf357604080518082018252601b81527f46494e414e43455f455845435554455f5041594d454e545f4e554d0000000000602080830191825292517f08c379a0000000000000000000000000000000000000000000000000000000008152600481019384528251602482015282519293928392604490920191908083836000838110156102a9578181015183820152602001610291565b604080518082018252601c81527f46494e414e43455f455845435554455f5041594d454e545f54494d4500000000602080830191825292517f08c379a0000000000000000000000000000000000000000000000000000000008152600481019384528251602482015282519293928392604490920191908083836000838110156102a9578181015183820152602001610291565b5050565b614d936130e5565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a4544000000000000000060208201529015614e2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b50614e68614e3b6144aa565b7febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e9063ffffffff61589b16565b565b60008073ffffffffffffffffffffffffffffffffffffffff83161515614e935760009150613f0b565b50506000903b1190565b60606148868573ffffffffffffffffffffffffffffffffffffffff1685858561589f565b5490565b5490565b6040805173ffffffffffffffffffffffffffffffffffffffff83166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f70a08231000000000000000000000000000000000000000000000000000000001790526000908180614f568684615935565b60408051808201909152601c81527f534146455f4552435f32305f42414c414e43455f52455645525445440000000060208201529193509150821515614ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052600090614886858261579d565b8051602002815290565b60008181526004602081905260408220908101548290819067ffffffffffffffff70010000000000000000000000000000000082048116780100000000000000000000000000000000000000000000000090920416106150ff576000199350614737565b60048301546151429067ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169168010000000000000000900416615966565b60048401549092506148869067ffffffffffffffff168363ffffffff61457f16565b60008161517084615228565b10158015614112575060008054604080517fe3d670d700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015291518694929093169263e3d670d792602480840193602093929083900390910190829087803b1580156151f357600080fd5b505af1158015615207573d6000803e3d6000fd5b505050506040513d602081101561521d57600080fd5b505110159392505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260408120548190819060ff161515615265576000199250610d4a565b73ffffffffffffffffffffffffffffffffffffffff841660009081526002602052604081205492506008906152986144ae565b67ffffffffffffffff1681526020808201929092526040908101600090812073ffffffffffffffffffffffffffffffffffffffff8816825260030190925290205490508181106152eb5760009250610d4a565b900392915050565b4290565b8361530187615228565b60408051808201909152601881527f46494e414e43455f52454d41494e494e475f4255444745540000000000000000602082015291111561539e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b506153ad8686868686866157eb565b505050505050565b60408051808201909152601581527f55494e5436345f4e554d4245525f544f4f5f4249470000000000000000000000602082015260009067ffffffffffffffff83111561545e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5090919050565b60008060008060006154756144ae565b9450600860008667ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060030160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002093508b156155055760018401546154fb908a63ffffffff615a2016565b600185015561551a565b8354615517908a63ffffffff615a2016565b84555b600760008154809291906001019190505592506006600084815260200190815260200160002091508a8260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550898260010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b8260010160146101000a81548160ff021916908315150217905550888260020181905550878260030181905550868260040160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506156296144c2565b6004830180547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff93841602177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000009288169283021790556000908152600860205260409020600181015490915015156156ca57600181018390555b8973ffffffffffffffffffffffffffffffffffffffff16837f5b2c6f4cb53711ae51d600df17fa68f8239b4a704f766c99642f667d1d7bd40e8e8c8a604051808415151515815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561575357818101518382015260200161573b565b50505050905090810190601f1680156157805780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a3505050505050505050505050565b6000806040516020818551602087016000895af160008111156157e1573d80156157ce57602081146157d7576157df565b600193506157df565b600183511493505b505b5090949350505050565b6157fb6000878787878787615465565b60008054604080517fbeabacc800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528981166024830152604482018990529151919092169263beabacc8926064808201939182900301818387803b15801561587b57600080fd5b505af115801561588f573d6000803e3d6000fd5b50505050505050505050565b9055565b60408051600480825260a0820190925260609160208201608080388339019050509050848160008151811015156158d257fe5b6020908102909101015280518490829060019081106158ed57fe5b60209081029091010152805183908290600290811061590857fe5b60209081029091010152805182908290600390811061592357fe5b60209081029091010152949350505050565b6000806000806040516020818751602089018a5afa9250600083111561595a57805191505b50909590945092505050565b60408051808201909152601381527f4d41544836345f4d554c5f4f564552464c4f5700000000000000000000000000602082015260009067ffffffffffffffff8481169084160290680100000000000000008210613924576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b60408051808201909152601181527f4d4154485f4144445f4f564552464c4f5700000000000000000000000000000060208201526000908383019084821015613924576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a95781810151838201526020016102915600a165627a7a7230582025ce23cd9f6cee1a663162b681b26fc3063f1f24ab9121098ce13315b367e4bf0029ebb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e",
  "deployedBytecode": "0x6080604052600436106102035763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630803fac0811461047e5780630842ace4146104a757806314920438146104ce578063162a0cf8146105305780631798de811461054a57806318f053da1461058557806319b7d7bd146105b35780632914b9bd146105fa5780632d00cad31461067c5780633280a8361461069957806332f0a3b51461072457806333ea3dc8146107395780635985feec146107ba5780635b14dbc8146107cf5780636436f189146107e457806367047c4a146107fc578063671273f4146108585780636abe602d1461087a57806374bfb426146108ac5780637e7db6e1146108dd57806380afdea81461090b5780638b3dd749146109205780639297d86014610935578063981cc34214610963578063988e6595146109785780639d4941d81461098d578063a1658fad146109bb578063a479e50814610a2f578063a662944114610a44578063b36fec5714610a66578063bfe07da614610a7b578063cb045a9614610aac578063d2d27b4114610ac4578063d4aae0c414610b18578063de048a7b14610b2d578063de4796ed14610b42578063e90a1b6e14610b57578063e94ebac514610b88578063eaa7ec6814610b9d578063eca8181714610bb2578063f636484614610be0578063fbfa77cf14610c26575b61020b610c3b565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a454400000000000000000000000060208201529015156102e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156102a9578181015183820152602001610291565b50505050905090810190601f1680156102d65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060006102f76102f2610c64565b610c6a565b60408051808201909152601b81527f46494e414e43455f434f4d504c4554455f5452414e534954494f4e00000000006020820152909150811515610397576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5060408051808201909152601b81527f46494e414e43455f4445504f5349545f414d4f554e545f5a45524f0000000000602082015260003411610436576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5061047b6000346040805190810160405280601d81526020017f4574686572207472616e7366657220746f2046696e616e636520617070000000815250336001610d51565b50005b34801561048a57600080fd5b50610493610c3b565b604080519115158252519081900360200190f35b3480156104b357600080fd5b506104bc611043565b60408051918252519081900360200190f35b3480156104da57600080fd5b506104bc73ffffffffffffffffffffffffffffffffffffffff6004803582169160248035909116916044359167ffffffffffffffff60643581169260843582169260a4359092169160c435908101910135611078565b34801561053c57600080fd5b506105486004356117f1565b005b34801561055657600080fd5b5061054873ffffffffffffffffffffffffffffffffffffffff6004351667ffffffffffffffff60243516611a50565b34801561059157600080fd5b5061054873ffffffffffffffffffffffffffffffffffffffff60043516611d45565b3480156105bf57600080fd5b506105e173ffffffffffffffffffffffffffffffffffffffff60043516611fb8565b6040805192835290151560208301528051918290030190f35b34801561060657600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261065394369492936024939284019190819084018382808284375094975061209e9650505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561068857600080fd5b5061054860043560243515156121aa565b3480156106a557600080fd5b506106b16004356123e4565b6040805173ffffffffffffffffffffffffffffffffffffffff9a8b168152988a1660208a01528881019790975267ffffffffffffffff9586166060890152938516608088015291841660a0870152151560c086015290911660e08401529092166101008201529051908190036101200190f35b34801561073057600080fd5b50610653612568565b34801561074557600080fd5b50610751600435612606565b6040805167ffffffffffffffff998a168152602081019890985287810196909652938716606087015273ffffffffffffffffffffffffffffffffffffffff9283166080870152911660a0850152151560c084015290921660e08201529051908190036101000190f35b3480156107c657600080fd5b506104bc612767565b3480156107db57600080fd5b506104bc61279c565b3480156107f057600080fd5b506105486004356127d1565b34801561080857600080fd5b5061081e67ffffffffffffffff60043516612a01565b60408051951515865267ffffffffffffffff9485166020870152929093168483015260608401526080830191909152519081900360a00190f35b34801561086457600080fd5b5061054867ffffffffffffffff60043516612b22565b34801561088657600080fd5b5061088f612de1565b6040805167ffffffffffffffff9092168252519081900360200190f35b3480156108b857600080fd5b5061054873ffffffffffffffffffffffffffffffffffffffff60043516602435612df1565b3480156108e957600080fd5b5061049373ffffffffffffffffffffffffffffffffffffffff600435166130a4565b34801561091757600080fd5b506104bc6130b5565b34801561092c57600080fd5b506104bc6130e5565b34801561094157600080fd5b5061054873ffffffffffffffffffffffffffffffffffffffff60043516613110565b34801561096f57600080fd5b506104bc613395565b34801561098457600080fd5b5061088f6133ca565b34801561099957600080fd5b5061054873ffffffffffffffffffffffffffffffffffffffff6004351661347a565b3480156109c757600080fd5b50604080516020600460443581810135838102808601850190965280855261049395833573ffffffffffffffffffffffffffffffffffffffff1695602480359636969560649593949201929182918501908490808284375094975061379c9650505050505050565b348015610a3b57600080fd5b5061065361392c565b348015610a5057600080fd5b5061049367ffffffffffffffff600435166139ee565b348015610a7257600080fd5b5061088f613aa5565b6105486004803573ffffffffffffffffffffffffffffffffffffffff16906024803591604435918201910135613b5e565b348015610ab857600080fd5b5061088f600435613e4d565b348015610ad057600080fd5b50610aff67ffffffffffffffff6004351673ffffffffffffffffffffffffffffffffffffffff60243516613f11565b6040805192835260208301919091528051918290030190f35b348015610b2457600080fd5b5061065361401c565b348015610b3957600080fd5b506104bc614047565b348015610b4e57600080fd5b5061049361404d565b348015610b6357600080fd5b5061049373ffffffffffffffffffffffffffffffffffffffff60043516602435614060565b348015610b9457600080fd5b506104bc614119565b348015610ba957600080fd5b506104bc61414e565b348015610bbe57600080fd5b506104bc73ffffffffffffffffffffffffffffffffffffffff60043516614154565b348015610bec57600080fd5b5061054873ffffffffffffffffffffffffffffffffffffffff60048035821691602480359091169160443591606435908101910135614205565b348015610c3257600080fd5b5061065361448e565b600080610c466130e5565b90508015801590610c5e575080610c5b6144aa565b10155b91505090565b60001990565b600080600060086000610c7b6144ae565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000209150610ca76144c2565b90505b815467ffffffffffffffff6801000000000000000090910481169082161115610d455767ffffffffffffffff84161515610ce75760009250610d4a565b60018201546000199094019315610d1257600754610d0c90600163ffffffff6144d416565b60028301555b8154610d3e90610d399068010000000000000000900467ffffffffffffffff16600161457f565b614631565b9150610caa565b600192505b5050919050565b610d5d8583868661473f565b73ffffffffffffffffffffffffffffffffffffffff85161515610e115760008054604080517f47e7ef240000000000000000000000000000000000000000000000000000000081526004810184905260248101889052905173ffffffffffffffffffffffffffffffffffffffff909216926347e7ef24928892604480820193929182900301818588803b158015610df357600080fd5b505af1158015610e07573d6000803e3d6000fd5b505050505061103c565b8015610ee057610e3f73ffffffffffffffffffffffffffffffffffffffff861633308763ffffffff61475616565b6040805190810160405280602081526020017f46494e414e43455f544b4e5f5452414e534645525f46524f4d5f524556455254815250901515610ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b505b600054610f0d9073ffffffffffffffffffffffffffffffffffffffff87811691168663ffffffff6147f716565b60408051808201909152601a81527f46494e414e43455f544b4e5f415050524f56455f4641494c45440000000000006020820152901515610faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5060008054604080517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260248201899052915191909216926347e7ef24926044808201939182900301818387803b15801561102357600080fd5b505af1158015611037573d6000803e3d6000fd5b505050505b5050505050565b604080517f4352454154455f5041594d454e54535f524f4c450000000000000000000000008152905190819003601401902081565b60008060405180807f4352454154455f5041594d454e54535f524f4c45000000000000000000000000815250601401905060405180910390206110dd8b8b8b8a67ffffffffffffffff168a67ffffffffffffffff168d67ffffffffffffffff1661488f565b6110e833838361379c565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515611185576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5060006111936102f2610c64565b60408051808201909152601b81527f46494e414e43455f434f4d504c4554455f5452414e534954494f4e00000000006020820152909150811515611233576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5060408051808201909152601f81527f46494e414e43455f4e45575f5041594d454e545f414d4f554e545f5a45524f00602082015260008c116112d2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5060408051808201909152601f81527f46494e414e43455f4e45575f5041594d454e545f494e5452564c5f5a45524f006020820152600067ffffffffffffffff8b161161137b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5060408051808201909152601e81527f46494e414e43455f4e45575f5041594d454e545f45584543535f5a45524f00006020820152600067ffffffffffffffff8a1611611424576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5073ffffffffffffffffffffffffffffffffffffffff8d1660009081526003602052604090205460ff16158061147f575073ffffffffffffffffffffffffffffffffffffffff8d166000908152600260205260409020548b11155b60408051808201909152600e81527f46494e414e43455f425544474554000000000000000000000000000000000000602082015290151561151c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b508767ffffffffffffffff16600114156115e5576115386144c2565b60408051808201909152601d81527f46494e414e43455f4e45575f5041594d454e545f494d4d45444941544500000060208201529067ffffffffffffffff908116908c16116115e3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b505b60058054600181019091556040805167ffffffffffffffff8b1681526020810182815291810189905291965073ffffffffffffffffffffffffffffffffffffffff8e169187917f41e8c14bdf2b044354d788d944b364e1de0b64aeddeba755b8ef69ab68bd9083918c918c918c91606082018484808284376040519201829003965090945050505050a36004600086815260200190815260200160002093508c8460000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b8460010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508a8460030181905550898460040160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550888460040160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550878460040160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550338460020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506117e085614989565b505050505098975050505050505050565b604080517f455845435554455f5041594d454e54535f524f4c45000000000000000000000081528151908190036015019020600083815260046020529190912060030154611840908390614bc6565b61184b33838361379c565b60408051808201909152600f81527f4150505f415554485f4641494c4544000000000000000000000000000000000060208201529015156118e8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b50826000811180156118fb575060055481105b60408051808201909152601c81527f46494e414e43455f4e4f5f5343484544554c45445f5041594d454e54000000006020820152901515611998576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5060006119a66102f2610c64565b60408051808201909152601b81527f46494e414e43455f434f4d504c4554455f5452414e534954494f4e00000000006020820152909150811515611a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5061103c85614c21565b611a586130e5565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a4544000000000000000060208201529015611af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b50611afd614d8b565b611b0682614e6a565b60408051808201909152601a81527f46494e414e43455f5641554c545f4e4f545f434f4e54524143540000000000006020820152901515611ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b50600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905560408051808201909152601c81527f46494e414e43455f5345545f504552494f445f544f4f5f53484f52540000000060208201526201518067ffffffffffffffff83161015611c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b506001805467ffffffffffffffff83167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009091161781556000805260046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ee80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556005819055600755611d40610d396144c2565b505050565b604080517f4348414e47455f425544474554535f524f4c45000000000000000000000000008152815190819003601301902073ffffffffffffffffffffffffffffffffffffffff8316600090815260026020908152838220546003909152928120549192611dca928592919060ff16611dbf576000611dc2565b60015b60ff16614e9d565b611dd533838361379c565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515611e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b506000611e806102f2610c64565b60408051808201909152601b81527f46494e414e43455f434f4d504c4554455f5452414e534954494f4e00000000006020820152909150811515611f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5073ffffffffffffffffffffffffffffffffffffffff841660008181526002602090815260408083208390556003825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905580518381529182019290925281517f6e768d8fe4a1460cae6d5af9382c3e9abbc41f66f2ec91fda24b12e3c2796f03929181900390910190a250505050565b600080611fc3610c3b565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a45440000000000000000000000006020820152901515612060576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b50505073ffffffffffffffffffffffffffffffffffffffff16600090815260026020908152604080832054600390925290912054909160ff90911690565b60006120a861392c565b73ffffffffffffffffffffffffffffffffffffffff166304bf2a7f836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561212c578181015183820152602001612114565b50505050905090810190601f1680156121595780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b15801561217857600080fd5b505af115801561218c573d6000803e3d6000fd5b505050506040513d60208110156121a257600080fd5b505192915050565b604080517f4d414e4147455f5041594d454e54535f524f4c45000000000000000000000000815290519081900360140190206121f783836121ec5760006121ef565b60015b60ff16614bc6565b61220233838361379c565b60408051808201909152600f81527f4150505f415554485f4641494c45440000000000000000000000000000000000602082015290151561229f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b50836000811180156122b2575060055481105b60408051808201909152601c81527f46494e414e43455f4e4f5f5343484544554c45445f5041594d454e5400000000602082015290151561234f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5060008581526004602090815260409182902060020180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16871574010000000000000000000000000000000000000000810291909117909155825190158152915187927faca91836ee6e44bf1c422f7ee89afb243a4fb775d9fe87150ff5f8e566dc161292908290030190a25050505050565b6000806000806000806000806000808a600081118015612405575060055481105b60408051808201909152601c81527f46494e414e43455f4e4f5f5343484544554c45445f5041594d454e540000000060208201529015156124a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5050506000998a5250506004602081905260409098208054600182015460038301549a83015460029093015473ffffffffffffffffffffffffffffffffffffffff9283169c9183169b9a5067ffffffffffffffff8085169a506801000000000000000085048116995070010000000000000000000000000000000085048116985060ff7401000000000000000000000000000000000000000083041697507801000000000000000000000000000000000000000000000000909404909316945091169150565b600061257261401c565b73ffffffffffffffffffffffffffffffffffffffff166332f0a3b56040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156125d557600080fd5b505af11580156125e9573d6000803e3d6000fd5b505050506040513d60208110156125ff57600080fd5b5051905090565b600080600080600080600080600089600081118015612626575060075481105b60408051808201909152601681527f46494e414e43455f4e4f5f5452414e53414354494f4e0000000000000000000060208201529015156126c3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b50505060009889525050600660205250506040909420805460018201546004830154600284015460039094015467ffffffffffffffff700100000000000000000000000000000000830481169a959950909750808216965073ffffffffffffffffffffffffffffffffffffffff9384169550928216937401000000000000000000000000000000000000000090920460ff1692680100000000000000009091041690565b604080517f4348414e47455f504552494f445f524f4c4500000000000000000000000000008152905190819003601201902081565b604080517f4348414e47455f425544474554535f524f4c45000000000000000000000000008152905190819003601301902081565b806000811180156127e3575060055481105b60408051808201909152601c81527f46494e414e43455f4e4f5f5343484544554c45445f5041594d454e54000000006020820152901515612880576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b50600061288e6102f2610c64565b60408051808201909152601b81527f46494e414e43455f434f4d504c4554455f5452414e534954494f4e0000000000602082015290915081151561292e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b50600083815260046020908152604091829020600101548251808401909352601883527f46494e414e43455f5041594d454e545f524543454956455200000000000000009183019190915273ffffffffffffffffffffffffffffffffffffffff1633146129f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b50611d4083614c21565b60095460408051808201909152601181527f46494e414e43455f4e4f5f504552494f44000000000000000000000000000000602082015260009182918291829182918291889167ffffffffffffffff90811690831610612abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5067ffffffffffffffff881660008181526008602052604090209250612ae16144ae565b8354600185015460029095015467ffffffffffffffff928316939093149b8183169b5068010000000000000000909104909116985092965094509092505050565b604080517f4348414e47455f504552494f445f524f4c45000000000000000000000000000081529051908190036012019020600154612b6e9067ffffffffffffffff8085169116614bc6565b612b7933838361379c565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515612c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b506000612c246102f2610c64565b60408051808201909152601b81527f46494e414e43455f434f4d504c4554455f5452414e534954494f4e00000000006020820152909150811515612cc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5060408051808201909152601c81527f46494e414e43455f5345545f504552494f445f544f4f5f53484f52540000000060208201526201518067ffffffffffffffff86161015612d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b506001805467ffffffffffffffff86167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909116811790915560408051918252517fa32389dd0d5a3bf7cc635f8c30fee3b70d06a6c547d6dbf31628378ee267bfc99181900360200190a150505050565b60095467ffffffffffffffff1681565b604080517f4348414e47455f425544474554535f524f4c45000000000000000000000000008152815190819003601301902073ffffffffffffffffffffffffffffffffffffffff8416600090815260026020908152838220546003909152929020549091612e6b918591859160ff16611dbf576000611dc2565b612e7633838361379c565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515612f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b506000612f216102f2610c64565b60408051808201909152601b81527f46494e414e43455f434f4d504c4554455f5452414e534954494f4e00000000006020820152909150811515612fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152600260209081526040808320879055600390915290205460ff16151561304d5773ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b6040805185815260016020820152815173ffffffffffffffffffffffffffffffffffffffff8816927f6e768d8fe4a1460cae6d5af9382c3e9abbc41f66f2ec91fda24b12e3c2796f03928290030190a25050505050565b60006130ae610c3b565b1592915050565b60006130e07fd625496217aa6a3453eecb9c3489dc5a53e6c67b444329ea2b2cbc9ff547639b614ec1565b905090565b60006130e07febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e614ec1565b600061311a610c3b565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a454400000000000000000000000060208201529015156131b7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5060006131c56102f2610c64565b60408051808201909152601b81527f46494e414e43455f434f4d504c4554455f5452414e534954494f4e00000000006020820152909150811515613265576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5073ffffffffffffffffffffffffffffffffffffffff8316156132ad576132a873ffffffffffffffffffffffffffffffffffffffff84163063ffffffff614ec916565b6132b0565b30315b60408051808201909152601b81527f46494e414e43455f5245434f5645525f414d4f554e545f5a45524f0000000000602082015290925060008311613351576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b50611d4083836040805190810160405280601081526020017f5265636f76657220746f205661756c7400000000000000000000000000000000815250306000610d51565b604080517f455845435554455f5041594d454e54535f524f4c4500000000000000000000008152905190819003601501902081565b60006133d4610c3b565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a45440000000000000000000000006020820152901515613471576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b506130e06144ae565b6000806000613488846130a4565b60408051808201909152601281527f5245434f5645525f444953414c4c4f57454400000000000000000000000000006020820152901515613525576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5061352e612568565b925061353983614e6a565b60408051808201909152601a81527f5245434f5645525f5641554c545f4e4f545f434f4e545241435400000000000060208201529015156135d6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5073ffffffffffffffffffffffffffffffffffffffff84161515613641576040513031925073ffffffffffffffffffffffffffffffffffffffff84169083156108fc029084906000818181858888f1935050505015801561363b573d6000803e3d6000fd5b50613731565b508261366973ffffffffffffffffffffffffffffffffffffffff82163063ffffffff614ec916565b915061369273ffffffffffffffffffffffffffffffffffffffff8216848463ffffffff61500216565b60408051808201909152601d81527f5245434f5645525f544f4b454e5f5452414e534645525f4641494c4544000000602082015290151561372f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b505b8373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f596caf56044b55fb8c4ca640089bbc2b63cae3e978b851f5745cbb7c5b288e02846040518082815260200191505060405180910390a350505050565b6000806137a7610c3b565b15156137b65760009150613924565b6137be61401c565b905073ffffffffffffffffffffffffffffffffffffffff811615156137e65760009150613924565b8073ffffffffffffffffffffffffffffffffffffffff1663fdef910686308761380e88615091565b6040517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff808616600483019081529085166024830152604482018490526080606483019081528351608484015283519192909160a490910190602085019080838360005b838110156138a657818101518382015260200161388e565b50505050905090810190601f1680156138d35780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1580156138f557600080fd5b505af1158015613909573d6000803e3d6000fd5b505050506040513d602081101561391f57600080fd5b505191505b509392505050565b60008061393761401c565b604080517fbe00bbd80000000000000000000000000000000000000000000000000000000081527fd6f028ca0e8edb4a8c9757ca4fdccab25fa1e0317da1188108f7d2dee14902fb60048201527fddbcfd564f642ab5627cf68b9b7d374fb4f8a36e941a75d89c87998cef03bd616024820152905173ffffffffffffffffffffffffffffffffffffffff929092169163be00bbd8916044808201926020929091908290030181600087803b15801561217857600080fd5b60006139f8610c3b565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a45440000000000000000000000006020820152901515613a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b50613a9f82610c6a565b92915050565b6000613aaf610c3b565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a45440000000000000000000000006020820152901515613b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b505060015467ffffffffffffffff1690565b613b66610c3b565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a45440000000000000000000000006020820152901515613c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b506000613c116102f2610c64565b60408051808201909152601b81527f46494e414e43455f434f4d504c4554455f5452414e534954494f4e00000000006020820152909150811515613cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5060408051808201909152601b81527f46494e414e43455f4445504f5349545f414d4f554e545f5a45524f0000000000602082015260008511613d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5073ffffffffffffffffffffffffffffffffffffffff85161515613e0d5760408051808201909152601a81527f46494e414e43455f4554485f56414c55455f4d49534d415443480000000000006020820152348514613e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b505b61103c858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050336001610d51565b600081600081118015613e61575060055481105b60408051808201909152601c81527f46494e414e43455f4e4f5f5343484544554c45445f5041594d454e54000000006020820152901515613efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b50613f088361509b565b91505b50919050565b60095460408051808201909152601181527f46494e414e43455f4e4f5f504552494f4400000000000000000000000000000060208201526000918291829186919067ffffffffffffffff90811690831610613fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5050505067ffffffffffffffff92909216600090815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff949094168352600390930190522080546001909101549092909150565b60006130e07f4172f0f7d2289153072b0a6ca36959e0cbe2efc3afe50fc81636caa96338137b614ec1565b60055481565b600060001961405a6130e5565b14905090565b600061406a610c3b565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a45440000000000000000000000006020820152901515614107576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b506141128383615164565b9392505050565b604080517f4d414e4147455f5041594d454e54535f524f4c450000000000000000000000008152905190819003601401902081565b60075481565b600061415e610c3b565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a454400000000000000000000000060208201529015156141fb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b50613a9f82615228565b604080517f4352454154455f5041594d454e54535f524f4c450000000000000000000000008152905190819003601401902061424f868686600019600161424a6152f3565b61488f565b61425a33838361379c565b60408051808201909152600f81527f4150505f415554485f4641494c4544000000000000000000000000000000000060208201529015156142f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5060006143056102f2610c64565b60408051808201909152601b81527f46494e414e43455f434f4d504c4554455f5452414e534954494f4e000000000060208201529091508115156143a5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5060408051808201909152601f81527f46494e414e43455f4e45575f5041594d454e545f414d4f554e545f5a45524f00602082015260008711614444576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b506144848888886000808a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437506152f7945050505050565b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b4390565b60095467ffffffffffffffff166000190190565b60006130e06144cf6152f3565b6153b5565b60408051808201909152601281527f4d4154485f5355425f554e444552464c4f5700000000000000000000000000006020820152600090819084841115614577576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b505050900390565b60408051808201909152601381527f4d41544836345f4144445f4f564552464c4f570000000000000000000000000060208201526000908383019067ffffffffffffffff8086169083161015613924576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b6009805467ffffffffffffffff808216600181810183167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000948516179094556000818152600860205260408120805487851695168517815594549094919391926000199181168701919091019190821610156146ac57506000195b81547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff83811682029290921780855560408051828516815292909104831660208301528051928616927fe183df4530c4b573af76d47f020d4b86e418cef40ed4c9ce924b563e791b832c9281900390910190a28193505b505050919050565b614750600185858560008087615465565b50505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526000906147ed868261579d565b9695505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b300000000000000000000000000000000000000000000000000000000179052600090614886858261579d565b95945050505050565b60408051600680825260e082019092526060916020820160c0803883390190505090508673ffffffffffffffffffffffffffffffffffffffff168160008151811015156148d857fe5b60209081029091010152805173ffffffffffffffffffffffffffffffffffffffff8716908290600190811061490957fe5b60209081029091010152805185908290600290811061492457fe5b60209081029091010152805184908290600390811061493f57fe5b60209081029091010152805183908290600490811061495a57fe5b60209081029091010152805182908290600590811061497557fe5b602090810290910101529695505050505050565b600081815260046020908152604080832060028101548251808401909352601883527f46494e414e43455f5041594d454e545f494e4143544956450000000000000000938301939093529183919074010000000000000000000000000000000000000000900460ff1615614a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b50600090505b614a676144c2565b67ffffffffffffffff16614a7a8561509b565b67ffffffffffffffff1611158015614a9c575060148167ffffffffffffffff16105b15614bb55781546003830154614ac89173ffffffffffffffffffffffffffffffffffffffff1690615164565b1515614b06576040805185815290517f5f352e4123f4620cacbb8eb0dd683705aaa3e1f9384adbbd85b665b205097f519181900360200190a1614bb5565b60048201805467ffffffffffffffff7801000000000000000000000000000000000000000000000000808304821660019081018316820277ffffffffffffffffffffffffffffffffffffffffffffffff909416939093179384905585548684015460038801546040805160208101909152600081529790950196614bb09673ffffffffffffffffffffffffffffffffffffffff93841696929093169491938b9304909116906157eb565b614a5f565b67ffffffffffffffff169392505050565b604080516002808252606080830184529260208301908038833901905050905082816000815181101515614bf657fe5b602090810290910101528051829082906001908110614c1157fe5b6020908102909101015292915050565b6000614c2c82614989565b9050801515614d8757614c3d6144c2565b67ffffffffffffffff16614c508361509b565b67ffffffffffffffff1611614cf357604080518082018252601b81527f46494e414e43455f455845435554455f5041594d454e545f4e554d0000000000602080830191825292517f08c379a0000000000000000000000000000000000000000000000000000000008152600481019384528251602482015282519293928392604490920191908083836000838110156102a9578181015183820152602001610291565b604080518082018252601c81527f46494e414e43455f455845435554455f5041594d454e545f54494d4500000000602080830191825292517f08c379a0000000000000000000000000000000000000000000000000000000008152600481019384528251602482015282519293928392604490920191908083836000838110156102a9578181015183820152602001610291565b5050565b614d936130e5565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a4544000000000000000060208201529015614e2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b50614e68614e3b6144aa565b7febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e9063ffffffff61589b16565b565b60008073ffffffffffffffffffffffffffffffffffffffff83161515614e935760009150613f0b565b50506000903b1190565b60606148868573ffffffffffffffffffffffffffffffffffffffff1685858561589f565b5490565b5490565b6040805173ffffffffffffffffffffffffffffffffffffffff83166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f70a08231000000000000000000000000000000000000000000000000000000001790526000908180614f568684615935565b60408051808201909152601c81527f534146455f4552435f32305f42414c414e43455f52455645525445440000000060208201529193509150821515614ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052600090614886858261579d565b8051602002815290565b60008181526004602081905260408220908101548290819067ffffffffffffffff70010000000000000000000000000000000082048116780100000000000000000000000000000000000000000000000090920416106150ff576000199350614737565b60048301546151429067ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169168010000000000000000900416615966565b60048401549092506148869067ffffffffffffffff168363ffffffff61457f16565b60008161517084615228565b10158015614112575060008054604080517fe3d670d700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015291518694929093169263e3d670d792602480840193602093929083900390910190829087803b1580156151f357600080fd5b505af1158015615207573d6000803e3d6000fd5b505050506040513d602081101561521d57600080fd5b505110159392505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260408120548190819060ff161515615265576000199250610d4a565b73ffffffffffffffffffffffffffffffffffffffff841660009081526002602052604081205492506008906152986144ae565b67ffffffffffffffff1681526020808201929092526040908101600090812073ffffffffffffffffffffffffffffffffffffffff8816825260030190925290205490508181106152eb5760009250610d4a565b900392915050565b4290565b8361530187615228565b60408051808201909152601881527f46494e414e43455f52454d41494e494e475f4255444745540000000000000000602082015291111561539e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b506153ad8686868686866157eb565b505050505050565b60408051808201909152601581527f55494e5436345f4e554d4245525f544f4f5f4249470000000000000000000000602082015260009067ffffffffffffffff83111561545e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b5090919050565b60008060008060006154756144ae565b9450600860008667ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060030160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002093508b156155055760018401546154fb908a63ffffffff615a2016565b600185015561551a565b8354615517908a63ffffffff615a2016565b84555b600760008154809291906001019190505592506006600084815260200190815260200160002091508a8260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550898260010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b8260010160146101000a81548160ff021916908315150217905550888260020181905550878260030181905550868260040160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506156296144c2565b6004830180547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff93841602177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000009288169283021790556000908152600860205260409020600181015490915015156156ca57600181018390555b8973ffffffffffffffffffffffffffffffffffffffff16837f5b2c6f4cb53711ae51d600df17fa68f8239b4a704f766c99642f667d1d7bd40e8e8c8a604051808415151515815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561575357818101518382015260200161573b565b50505050905090810190601f1680156157805780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a3505050505050505050505050565b6000806040516020818551602087016000895af160008111156157e1573d80156157ce57602081146157d7576157df565b600193506157df565b600183511493505b505b5090949350505050565b6157fb6000878787878787615465565b60008054604080517fbeabacc800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528981166024830152604482018990529151919092169263beabacc8926064808201939182900301818387803b15801561587b57600080fd5b505af115801561588f573d6000803e3d6000fd5b50505050505050505050565b9055565b60408051600480825260a0820190925260609160208201608080388339019050509050848160008151811015156158d257fe5b6020908102909101015280518490829060019081106158ed57fe5b60209081029091010152805183908290600290811061590857fe5b60209081029091010152805182908290600390811061592357fe5b60209081029091010152949350505050565b6000806000806040516020818751602089018a5afa9250600083111561595a57805191505b50909590945092505050565b60408051808201909152601381527f4d41544836345f4d554c5f4f564552464c4f5700000000000000000000000000602082015260009067ffffffffffffffff8481169084160290680100000000000000008210613924576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a9578181015183820152602001610291565b60408051808201909152601181527f4d4154485f4144445f4f564552464c4f5700000000000000000000000000000060208201526000908383019084821015613924576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102a95781810151838201526020016102915600a165627a7a7230582025ce23cd9f6cee1a663162b681b26fc3063f1f24ab9121098ce13315b367e4bf0029",
  "sourceMap": "510:31727:7:-;;;344:9:24;:7;;;;:9;:::i;:::-;510:31727:7;;590:84:34;615:24:32;:22;;;;:24;:::i;:::-;646:25;;;;;;;;;;;;;;;;;;615:29;607:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;607:65:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;637:30:34;-1:-1:-1;;637:13:34;;;;:30;:::i;:::-;590:84::o;881:137:32:-;936:7;962:49;-1:-1:-1;;;;;;;;;;;962:47:32;;;;;;:49;:::i;:::-;955:56;;881:137;:::o;1751:141::-;615:24;:22;;;;:24;:::i;:::-;646:25;;;;;;;;;;;;;;;;;;615:29;607:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;607:65:32;-1:-1:-1;1824:61:32;-1:-1:-1;;;;;;;;;;;1872:12:32;1824:47;;;;;;:61;:::i;:::-;1751:141;:::o;519:134:39:-;630:15;;620:27::o;1028:119::-;1117:22;;1115:26::o;510:31727:7:-;;;;;;;",
  "deployedSourceMap": "510:31727:7:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;737:16:32;:14;:16::i;:::-;755:21;;;;;;;;;;;;;;;;;;729:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;729:48:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5683:23:7;5709:57;5740:25;:23;:25::i;:::-;5709:30;:57::i;:::-;5804:25;;;;;;;;;;;;;;;;;5683:83;;-1:-1:-1;5776:54:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;5776:54:7;-1:-1:-1;6590:25:7;;;;;;;;;;;;;;;;;6587:1;6575:9;:13;6567:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;6567:49:7;;6626:145;269:1:29;6665:9:7;6626:145;;;;;;;;;;;;;;;;;;6733:10;6757:4;6626:8;:145::i;:::-;787:1:32;510:31727:7;1128:208:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1128:208:32;;;;;;;;;;;;;;;;;;;;;;675:80:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;675:80:7;;;;;;;;;;;;;;;;;;;;10972:1875;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10972:1875:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14767:281;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14767:281:7;;;;;;;7057:746;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7057:746:7;;;;;;;;;;;14252:347;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14252:347:7;;;;;;;21689:200;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21689:200:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;795:179:42;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;795:179:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;795:179:42;;-1:-1:-1;795:179:42;;-1:-1:-1;;;;;;;795:179:42;;;;;;;;;;;;;;;;;;;;16194:323:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16194:323:7;;;;;;;;;18480:859;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18480:859:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2253:229:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2253:229:23;;;;19345:809:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19345:809:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;761:76;;8:9:-1;5:2;;;30:1;27;20:12;5:2;761:76:7;;;;843:78;;8:9:-1;5:2;;;30:1;27;20:12;5:2;843:78:7;;;;15436:264;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15436:264:7;;;;;20160:589;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20160:589:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13052:387;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13052:387:7;;;;;;;4825:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4825:27:7;;;;;;;;;;;;;;;;;;;;;;;13657:447;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13657:447:7;;;;;;;;;18368:106;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18368:106:7;;;;;;;796::22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;796:106:22;;;;881:137:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;881:137:32;;;;16930:402:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16930:402:7;;;;;;;927:82;;8:9:-1;5:2;;;30:1;27;20:12;5:2;927:82:7;;;;21232:112;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21232:112:7;;;;836:623:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;836:623:40;;;;;;;1641:496:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1641:496:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1641:496:23;;-1:-1:-1;1641:496:23;;-1:-1:-1;;;;;;;1641:496:23;980:231:42;;8:9:-1;5:2;;;30:1;27;20:12;5:2;980:231:42;;;;17886:180:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;17886:180:7;;;;;;;21457:119;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21457:119:7;;;;8063:520;;;;;;;;;;;;;;;;;;;;;;22630:161;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22630:161:7;;;;;20755:364;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20755:364:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;674:116:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;674:116:22;;;;4634:32:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4634:32:7;;;;287:117:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;287:117:34;;;;22254:154:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22254:154:7;;;;;;;;;1015:80;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1015:80:7;;;;4733:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4733:36:7;;;;22002:139;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22002:139:7;;;;;;;9423:774;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9423:774:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;4277:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4277:18:7;;;;1128:208:32;1175:4;1191:27;1221:24;:22;:24::i;:::-;1191:54;-1:-1:-1;1262:24:32;;;;;:67;;;1310:19;1290:16;:14;:16::i;:::-;:39;;1262:67;1255:74;;1128:208;;:::o;32147:88:7:-;-1:-1:-1;;32147:88:7;:::o;29041:1115::-;29123:12;29147:28;29215:16;29178:7;:27;29186:18;:16;:18::i;:::-;29178:27;;;;;;;;;;;;;;;29147:58;;29234:16;:14;:16::i;:::-;29215:35;;29304:824;29323:21;;;;;;;;;29311:33;;;;29304:824;;;29364:20;;;;29360:215;;;29555:5;29548:12;;;;29360:215;29670:1;29851:32;;;-1:-1:-1;;29651:20:7;;;;29851:50;29847:151;;29955:21;;:28;;29981:1;29955:28;:25;:28;:::i;:::-;29921:31;;;:62;29847:151;30088:21;;30077:40;;30088:28;;:21;;;;;30114:1;30088:25;:28::i;:::-;30077:10;:40::i;:::-;30061:56;;29304:824;;;30145:4;30138:11;;29041:1115;;;;;;:::o;22818:1174::-;22949:122;22989:6;23009:7;23030;23051:10;22949:26;:122::i;:::-;23086:13;;;;23082:904;;;23115:5;;;:42;;;;;;;;;;;;;;;;;;;;:5;;;;;:13;;23135:7;;23115:42;;;;;:5;:42;;;;;;23135:7;23115:5;:42;;;5:2:-1;;;;30:1;27;20:12;5:2;23115:42:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23115:42:7;;;;;23082:904;;;23412:18;23408:305;;;23558:66;:30;;;23589:10;23609:4;23616:7;23558:66;:30;:66;:::i;:::-;23646:34;;;;;;;;;;;;;;;;;;23529:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;23529:169:7;;23408:305;23842:5;;23816:41;;23842:5;23816:25;;;;23842:5;23849:7;23816:41;:25;:41;:::i;:::-;23859:26;;;;;;;;;;;;;;;;;;23808:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;23808:78:7;-1:-1:-1;23945:5:7;;;:30;;;;;;:5;:30;;;;;;;;;;;;;;;:5;;;;;:13;;:30;;;;;;;;;;;:5;;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;23945:30:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23945:30:7;;;;23082:904;22818:1174;;;;;:::o;675:80::-;722:33;;;;;;;;;;;;;;;;675:80;:::o;10972:1875::-;11490:17;12293:32;722:33;;;;;;;;;;;;;;;;;;;11338:107;11343:6;11351:9;11362:7;11379:9;11371:18;;11399:14;11391:23;;11424:19;11416:28;;11338:4;:107::i;:::-;1148:38:23;1159:10;1171:5;1178:7;1148:10;:38::i;:::-;1188:17;;;;;;;;;;;;;;;;;;1140:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1140:66:23;;5683:23:7;5709:57;5740:25;:23;:25::i;5709:57::-;5804:25;;;;;;;;;;;;;;;;;5683:83;;-1:-1:-1;5776:54:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;5776:54:7;-1:-1:-1;11544:29:7;;;;;;;;;;;;;;;;;11541:1;11531:11;;11523:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;11523:51:7;-1:-1:-1;11607:31:7;;;;;;;;;;;;;;;;;11604:1;11592:13;;;;11584:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;11584:55:7;-1:-1:-1;11677:28:7;;;;;;;;;;;;;;;;;11674:1;11657:18;;;;11649:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;11649:57:7;-1:-1:-1;11832:26:7;;;;;;;:18;:26;;;;;;;;11831:27;;:66;;-1:-1:-1;11862:24:7;;;;;;;:16;:24;;;;;;:35;-1:-1:-1;11862:35:7;11831:66;11899:12;;;;;;;;;;;;;;;;;;11823:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;11823:89:7;;12044:14;:19;;12062:1;12044:19;12040:126;;;12109:16;:14;:16::i;:::-;12127:27;;;;;;;;;;;;;;;;;;12087:38;;;;;;;;12079:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;12079:76:7;;12040:126;12188:17;:19;;;;;;;;12222:60;;;;;;;;;;;;;;;;;;;;12188:19;;-1:-1:-1;12222:60:7;;;;12188:19;;12222:60;;12255:14;;12271:10;;;;12222:60;;;12271:10;;;;12222:60;;;;;;;;;;-1:-1:-1;12222:60:7;;-1:-1:-1;;;;;12222:60:7;12328:17;:28;12346:9;12328:28;;;;;;;;;;;12293:63;;12382:6;12366:7;:13;;;:22;;;;;;;;;;;;;;;;;;12417:9;12398:7;:16;;;:28;;;;;;;;;;;;;;;;;;12453:7;12436;:14;;:24;;;;12499:19;12470:7;:26;;;:48;;;;;;;;;;;;;;;;;;12547:9;12528:7;:16;;;:28;;;;;;;;;;;;;;;;;;12590:14;12566:7;:21;;;:38;;;;;;;;;;;;;;;;;;12634:10;12614:7;:17;;;:30;;;;;;;;;;;;;;;;;;12814:26;12830:9;12814:15;:26::i;:::-;;1216:1:23;10972:1875:7;;;;;;;;;;;;;:::o;14767:281::-;975:34;;;;;;;;;;;;;;;;14881:29;;;;:17;:29;;;;;;:36;;;14865:53;;14869:10;;14865:3;:53::i;:::-;1148:38:23;1159:10;1171:5;1178:7;1148:10;:38::i;:::-;1188:17;;;;;;;;;;;;;;;;;;1140:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1140:66:23;;14951:10:7;5937:1;5924:10;:14;:48;;;;;5955:17;;5942:10;:30;5924:48;5974:26;;;;;;;;;;;;;;;;;;5916:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;5916:85:7;;5683:23;5709:57;5740:25;:23;:25::i;5709:57::-;5804:25;;;;;;;;;;;;;;;;;5683:83;;-1:-1:-1;5776:54:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;5776:54:7;;15003:38;15030:10;15003:26;:38::i;7057:746::-;615:24:32;:22;:24::i;:::-;646:25;;;;;;;;;;;;;;;;;;615:29;607:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;607:65:32;;7143:13:7;:11;:13::i;:::-;7175:18;7186:6;7175:10;:18::i;:::-;7195:24;;;;;;;;;;;;;;;;;;7167:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;7167:53:7;-1:-1:-1;7230:5:7;:14;;;;;;;;;;7298:26;;;;;;;;;;;;;;;;;1434:6;7263:33;;;;;7255:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;7255:70:7;-1:-1:-1;7335:8:7;:41;;;;;;;;;;;;:23;7521:20;;:17;:20;;:29;:36;;;;;;;;7567:17;:21;;;7698;:25;7768:28;7779:16;:14;:16::i;7768:28::-;;7057:746;;:::o;14252:347::-;889:32;;;;;;;;;;;;;;;;14366:24;;;14362:1;14366:24;;;:16;:24;;;;;;;;14400:18;:26;;;;;;;889:32;;14342:94;;14346:6;;14362:1;14366:24;14400:26;;:34;;14433:1;14400:34;;;14429:1;14400:34;14392:43;;14342:3;:94::i;:::-;1148:38:23;1159:10;1171:5;1178:7;1148:10;:38::i;:::-;1188:17;;;;;;;;;;;;;;;;;;1140:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1140:66:23;;5683:23:7;5709:57;5740:25;:23;:25::i;5709:57::-;5804:25;;;;;;;;;;;;;;;;;5683:83;;-1:-1:-1;5776:54:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;5776:54:7;-1:-1:-1;14478:24:7;;;14505:1;14478:24;;;:16;:24;;;;;;;;:28;;;14516:18;:26;;;;;:34;;;;;;14565:27;;;;;;;;;;;;;;;;;;;;;;;;;1216:1:23;14252:347:7;;;:::o;21689:200::-;21759:14;21775;737:16:32;:14;:16::i;:::-;755:21;;;;;;;;;;;;;;;;;;729:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;729:48:32;-1:-1:-1;;;21810:24:7;;;;;;:16;:24;;;;;;;;;21856:18;:26;;;;;;;21810:24;;21856:26;;;;;21689:200::o;795:179:42:-;861:18;917:22;:20;:22::i;:::-;:40;;;958:7;917:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;917:49:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;917:49:42;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;917:49:42;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;917:49:42;;795:179;-1:-1:-1;;795:179:42:o;16194:323:7:-;1062:33;;;;;;;;;;;;;;;;16307:41;16311:10;16331:7;:15;;16345:1;16331:15;;;16341:1;16331:15;16323:24;;16307:3;:41::i;:::-;1148:38:23;1159:10;1171:5;1178:7;1148:10;:38::i;:::-;1188:17;;;;;;;;;;;;;;;;;;1140:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1140:66:23;;16381:10:7;5937:1;5924:10;:14;:48;;;;;5955:17;;5942:10;:30;5924:48;5974:26;;;;;;;;;;;;;;;;;;5916:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;5916:85:7;-1:-1:-1;16407:29:7;;;;:17;:29;;;;;;;;;:38;;:49;;;;16448:8;;16407:49;;;;;;;;;;16471:39;;16407:49;;16471:39;;;;16407:29;;16471:39;;;;;;;;;1216:1:23;16194:323:7;;;;:::o;18480:859::-;18621:13;18648:16;18678:14;18706:25;18745:15;18774:20;18808:13;18835:17;18866;18908:32;18579:10;5937:1;5924:10;:14;:48;;;;;5955:17;;5942:10;:30;5924:48;5974:26;;;;;;;;;;;;;;;;;;5916:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;5916:85:7;-1:-1:-1;;;18943:29:7;;;;-1:-1:-1;;18943:17:7;:29;;;;;;;;18991:13;;;19025:16;;;19060:14;;;;19105:26;;;;19277:16;;;;;18991:13;;;;;19025:16;;;;19060:14;-1:-1:-1;19105:26:7;;;;;-1:-1:-1;19152:16:7;;;;;;-1:-1:-1;19194:21:7;;;;;;-1:-1:-1;19277:16:7;;;;;;-1:-1:-1;19238:18:7;;;;;;;;-1:-1:-1;19315:17:7;;;-1:-1:-1;18480:859:7:o;2253:229:23:-;2302:7;2408:8;:6;:8::i;:::-;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2408:27:23;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2408:27:23;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2408:27:23;;-1:-1:-1;2253:229:23;:::o;19345:809:7:-;19493:15;19522:14;19550:17;19581:29;19624:13;19651:14;19679:15;19708:11;19744:31;19447:14;6111:1;6094:14;:18;:60;;;;;6133:21;;6116:14;:38;6094:60;6156:20;;;;;;;;;;;;;;;;;;6086:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;6086:91:7;-1:-1:-1;;;19778:28:7;;;;-1:-1:-1;;19778:12:7;:28;;-1:-1:-1;;19778:28:7;;;;19825:17;;;19861:18;;;19941:16;;;;20017:18;;;;20057:21;;;;;19941:16;19978:20;;;;;;20017:18;;-1:-1:-1;20057:21:7;;-1:-1:-1;20113:34:7;;;;-1:-1:-1;19825:17:7;;;;;-1:-1:-1;19861:18:7;;;;19902:22;;;;;;;19941:16;;;;;;19345:809::o;761:76::-;806:31;;;;;;;;;;;;;;;;761:76;:::o;843:78::-;889:32;;;;;;;;;;;;;;;;843:78;:::o;15436:264::-;15520:10;5937:1;5924:10;:14;:48;;;;;5955:17;;5942:10;:30;5924:48;5974:26;;;;;;;;;;;;;;;;;;5916:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;5916:85:7;;5683:23;5709:57;5740:25;:23;:25::i;5709:57::-;5804:25;;;;;;;;;;;;;;;;;5683:83;;-1:-1:-1;5776:54:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;5776:54:7;-1:-1:-1;15568:29:7;;;;:17;:29;;;;;;;;;:38;;;15622:22;;;;;;;;;;;;;;;;;;;15568:52;:38;15610:10;15568:52;15560:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;15560:85:7;;15655:38;15682:10;15655:26;:38::i;20160:589::-;6271:13;;6286:15;;;;;;;;;;;;;;;;;20287:14;;;;;;;;;;;;20246:9;;6271:13;;;;6259:25;;;;6251:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;6251:51:7;-1:-1:-1;20487:18:7;;;;;;;:7;:18;;;;;;-1:-1:-1;20528:18:7;:16;:18::i;:::-;20582:16;;;20663:25;;;20718:24;;;;;20528:31;;;;;;;;;20582:16;;;;-1:-1:-1;20618:14:7;;;;;;;;-1:-1:-1;20663:25:7;;-1:-1:-1;20718:24:7;-1:-1:-1;20160:589:7;;-1:-1:-1;;;20160:589:7:o;13052:387::-;806:31;;;;;;;;;;;;;;;;13192:8;:23;13154:63;;13158:24;;;;;13192:23;13154:3;:63::i;:::-;1148:38:23;1159:10;1171:5;1178:7;1148:10;:38::i;:::-;1188:17;;;;;;;;;;;;;;;;;;1140:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1140:66:23;;5683:23:7;5709:57;5740:25;:23;:25::i;5709:57::-;5804:25;;;;;;;;;;;;;;;;;5683:83;;-1:-1:-1;5776:54:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;5776:54:7;-1:-1:-1;13302:26:7;;;;;;;;;;;;;;;;;1434:6;13267:33;;;;;13259:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;13259:70:7;-1:-1:-1;13339:8:7;:41;;;;;;;;;;;;;;13395:37;;;;;;;;;;;;;;;;1216:1:23;13052:387:7;;;:::o;4825:27::-;;;;;;:::o;13657:447::-;889:32;;;;;;;;;;;;;;;;13804:24;;;;;;;:16;:24;;;;;;;;13838:18;:26;;;;;;;889:32;;13783:91;;13787:6;;13795:7;;13838:26;;:34;;13871:1;13838:34;;13783:91;1148:38:23;1159:10;1171:5;1178:7;1148:10;:38::i;:::-;1188:17;;;;;;;;;;;;;;;;;;1140:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1140:66:23;;5683:23:7;5709:57;5740:25;:23;:25::i;5709:57::-;5804:25;;;;;;;;;;;;;;;;;5683:83;;-1:-1:-1;5776:54:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;5776:54:7;-1:-1:-1;13916:24:7;;;;;;;:16;:24;;;;;;;;:34;;;13965:18;:26;;;;;;;;13964:27;13960:91;;;14007:26;;;;;;;:18;:26;;;;;:33;;;;14036:4;14007:33;;;13960:91;14065:32;;;;;;14092:4;14065:32;;;;;;;;;;;;;;;;;;1216:1:23;13657:447:7;;;;:::o;18368:106::-;18427:4;18451:16;:14;:16::i;:::-;18450:17;;18368:106;-1:-1:-1;;18368:106:7:o;796::22:-;834:7;860:35;601:66;860:33;:35::i;:::-;853:42;;796:106;:::o;881:137:32:-;936:7;962:49;345:66;962:47;:49::i;16930:402:7:-;17021:14;737:16:32;:14;:16::i;:::-;755:21;;;;;;;;;;;;;;;;;;729:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;729:48:32;;5683:23:7;5709:57;5740:25;:23;:25::i;5709:57::-;5804:25;;;;;;;;;;;;;;;;;5683:83;;-1:-1:-1;5776:54:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;5776:54:7;-1:-1:-1;17038:13:7;;;;:84;;17078:44;:29;;;17116:4;17078:44;:29;:44;:::i;:::-;17038:84;;;17062:4;17054:21;17038:84;17152:25;;;;;;;;;;;;;;;;;17021:101;;-1:-1:-1;17149:1:7;17140:10;;17132:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;17132:46:7;;17189:136;17211:6;17231;17189:136;;;;;;;;;;;;;;;;;;17291:4;17310:5;17189:8;:136::i;927:82::-;975:34;;;;;;;;;;;;;;;;927:82;:::o;21232:112::-;21294:6;737:16:32;:14;:16::i;:::-;755:21;;;;;;;;;;;;;;;;;;729:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;729:48:32;;21319:18:7;:16;:18::i;836:623:40:-;960:13;1067:15;1224:11;904:27;924:6;904:19;:27::i;:::-;933:16;;;;;;;;;;;;;;;;;;896:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;896:54:40;;976:18;:16;:18::i;:::-;960:34;;1012:17;1023:5;1012:10;:17::i;:::-;1031:24;;;;;;;;;;;;;;;;;;1004:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1004:52:40;-1:-1:-1;1096:13:40;;;;1092:307;;;1170:23;;1143:4;1135:21;;-1:-1:-1;1135:21:40;1170:14;;;:23;;;;;1135:21;;1170:23;;;;1135:21;1170:14;:23;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1170:23:40;1092:307;;;-1:-1:-1;1244:6:40;1275:27;:21;;;1297:4;1275:27;:21;:27;:::i;:::-;1265:37;-1:-1:-1;1324:34:40;:18;;;1343:5;1265:37;1324:34;:18;:34;:::i;:::-;1360:27;;;;;;;;;;;;;;;;;;1316:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1316:72:40;;1092:307;1436:6;1414:38;;1429:5;1414:38;;;1444:7;1414:38;;;;;;;;;;;;;;;;;;836:623;;;;:::o;1641:496:23:-;1733:4;1819:20;1754:16;:14;:16::i;:::-;1753:17;1749:60;;;1793:5;1786:12;;;;1749:60;1842:8;:6;:8::i;:::-;1819:31;-1:-1:-1;1864:35:23;;;;1860:78;;;1922:5;1915:12;;;;1860:78;1955:12;:26;;;1995:7;2024:4;2043:5;2062:58;2112:7;2062:49;:58::i;:::-;1955:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1955:175:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1955:175:23;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1955:175:23;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1955:175:23;;-1:-1:-1;1641:496:23;;;;;;;:::o;980:231:42:-;1033:18;1063:20;1086:8;:6;:8::i;:::-;:69;;;;;;1368:66:53;1086:69:42;;;;330:66:44;1086:69:42;;;;;;:15;;;;;;;;:69;;;;;;;;;;;;;;;;:15;:69;;;5:2:-1;;;;30:1;27;20:12;17886:180:7;17981:12;737:16:32;:14;:16::i;:::-;755:21;;;;;;;;;;;;;;;;;;729:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;729:48:32;;18012:47:7;18043:15;18012:30;:47::i;:::-;18005:54;17886:180;-1:-1:-1;;17886:180:7:o;21457:119::-;21521:6;737:16:32;:14;:16::i;:::-;755:21;;;;;;;;;;;;;;;;;;729:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;729:48:32;-1:-1:-1;;21546:8:7;:23;;;21457:119;:::o;8063:520::-;737:16:32;:14;:16::i;:::-;755:21;;;;;;;;;;;;;;;;;;729:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;729:48:32;;5683:23:7;5709:57;5740:25;:23;:25::i;5709:57::-;5804:25;;;;;;;;;;;;;;;;;5683:83;;-1:-1:-1;5776:54:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;5776:54:7;-1:-1:-1;8212:25:7;;;;;;;;;;;;;;;;;8209:1;8199:11;;8191:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;8191:47:7;-1:-1:-1;8252:13:7;;;;8248:193;;;8405:24;;;;;;;;;;;;;;;;;8383:9;:20;;8375:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;8375:55:7;;8248:193;8451:125;8473:6;8493:7;8514:10;;8451:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8538:10;8562:4;8451:8;:125::i;22630:161::-;22731:6;22710:10;5937:1;5924:10;:14;:48;;;;;5955:17;;5942:10;:30;5924:48;5974:26;;;;;;;;;;;;;;;;;;5916:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;5916:85:7;;22756:28;22773:10;22756:16;:28::i;:::-;22749:35;;6011:1;22630:161;;;;:::o;20755:364::-;6271:13;;6286:15;;;;;;;;;;;;;;;;;20899:16;;;;;;20871:9;;6286:15;6271:13;;;;6259:25;;;;6251:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;6251:51:7;-1:-1:-1;;;;20987:18:7;;;;;;;;;:7;:18;;;;;;;;:41;;;;;;;:33;;;;:41;;;21049:23;;21091:21;;;;;21049:23;;21091:21;;-1:-1:-1;20755:364:7:o;674:116:22:-;713:7;747:35;485:66;747:33;:35::i;4634:32:7:-;;;;:::o;287:117:34:-;331:4;-1:-1:-1;;354:24:34;:22;:24::i;:::-;:43;347:50;;287:117;:::o;22254:154:7:-;22346:4;737:16:32;:14;:16::i;:::-;755:21;;;;;;;;;;;;;;;;;;729:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;729:48:32;;22369:32:7;22385:6;22393:7;22369:15;:32::i;:::-;22362:39;22254:154;-1:-1:-1;;;22254:154:7:o;1015:80::-;1062:33;;;;;;;;;;;;;;;;1015:80;:::o;4733:36::-;;;;:::o;22002:139::-;22081:7;737:16:32;:14;:16::i;:::-;755:21;;;;;;;;;;;;;;;;;;729:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;729:48:32;;22107:27:7;22127:6;22107:19;:27::i;9423:774::-;722:33;;;;;;;;;;;;;;;;9746:73;9751:6;9759:9;9770:7;-1:-1:-1;;9800:1:7;9804:14;:12;:14::i;:::-;9746:4;:73::i;:::-;1148:38:23;1159:10;1171:5;1178:7;1148:10;:38::i;:::-;1188:17;;;;;;;;;;;;;;;;;;1140:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1140:66:23;;5683:23:7;5709:57;5740:25;:23;:25::i;5709:57::-;5804:25;;;;;;;;;;;;;;;;;5683:83;;-1:-1:-1;5776:54:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;5776:54:7;-1:-1:-1;9882:29:7;;;;;;;;;;;;;;;;;9879:1;9869:11;;9861:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;9861:51:7;;9923:267;9960:6;9980:9;10003:7;1151:1;10109;10170:10;;9923:267;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9923:23:7;;-1:-1:-1;;;;;9923:267:7:i;:::-;1216:1:23;9423:774:7;;;;;;;:::o;4277:18::-;;;;;;:::o;347:94:37:-;422:12;347:94;:::o;30353:188:7:-;30517:13;;;;-1:-1:-1;;30517:17:7;;30353:188::o;1261:106:37:-;1310:6;1335:25;:14;:12;:14::i;:::-;:23;:25::i;1685:172:59:-;1782:19;;;;;;;;;;;;;;;;;1745:7;;;;1772:8;;;;1764:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1764:38:59;-1:-1:-1;;;1824:7:59;;;1685:172::o;1835:166:60:-;1956:18;;;;;;;;;;;;;;;;;1893:6;;1922:7;;;;1947;;;;;;;;;1939:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;26455:777:7;26652:13;:15;;;;;;;;;;;;;;;;;;;;26512:6;26702:20;;;:7;:20;;;;;26732:29;;;;;;;;;;;26974:23;;26512:6;;26652:15;;26702:20;;-1:-1:-1;;26974:23:7;;;26961:36;;:40;;;;;27015:20;;;;27011:85;;;-1:-1:-1;;;27011:85:7;27105:24;;;;;;;;;;;;;;;;;;27145:56;;;27168:16;;;27145:56;;27186:14;;;;;;27145:56;;;;;;;;;;;;;;;;;;;;27219:6;27212:13;;26455:777;;;;;;;:::o;27238:452::-;27412:271;27444:4;27486:6;27506:7;27527;1151:1;27619;27663:10;27412:18;:271::i;:::-;27238:452;;;;:::o;3586:361:36:-;3741:131;;;3777:19;3741:131;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;3741:131:36;;;;;;;;25:18:-1;;61:17;;3741:131:36;182:15:-1;3777:28:36;179:29:-1;160:49;;3689:4:36;;3889:51;3777:6;3741:131;3889:21;:51::i;:::-;3882:58;3586:361;-1:-1:-1;;;;;;3586:361:36:o;4124:317::-;4259:112;;;4295:14;4259:112;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;4259:112:36;;;;;;;;25:18:-1;;61:17;;4259:112:36;182:15:-1;4295:23:36;179:29:-1;160:49;;4212:4:36;;4388:46;4295:6;4259:112;4388:21;:46::i;:::-;4381:53;4124:317;-1:-1:-1;;;;;4124:317:36:o;31763:291:7:-;31899:16;;;31913:1;31899:16;;;;;;;;;31872:11;;31899:16;;;17:15:-1;;105:10;31899:16:7;88:34:-1;136:17;;-1:-1;31899:16:7;31895:20;;31940:2;31932:11;;31925:1;31927;31925:4;;;;;;;;;;;;;;;;;;:18;31953:4;;31960:11;;;;31953:1;;31955;;31953:4;;;;;;;;;;;;;;:18;31981:4;;31988:2;;31981:1;;31983;;31981:4;;;;;;;;;;;;;;:9;32000:4;;32007:2;;32000:1;;32002;;32000:4;;;;;;;;;;;;;;:9;32019:4;;32026:2;;32019:1;;32021;;32019:4;;;;;;;;;;;;;;:9;32038:4;;32045:2;;32038:1;;32040;;32038:4;;;;;;;;;;;;;;:9;31763:291;;-1:-1:-1;;;;;;31763:291:7:o;23998:992::-;24061:7;24115:29;;;:17;:29;;;;;;;;24163:16;;;;24181:22;;;;;;;;;;;;;;;;;;;24115:29;24061:7;;24181:22;24163:16;;;;;24162:17;24154:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;24154:50:7;;24229:1;24215:15;;24240:722;24279:16;:14;:16::i;:::-;24247:48;;:28;24264:10;24247:16;:28::i;:::-;:48;;;;:88;;;;;1266:2;24299:4;:36;;;24247:88;24240:722;;;24372:13;;24387:14;;;;24356:46;;24372:13;;;24356:15;:46::i;:::-;24355:47;24351:140;;;24427:26;;;;;;;;;;;;;;;;;24471:5;;24351:140;24583:18;;;:23;;;;;;;;;24605:1;24583:23;;;;;;;;;;;;;;;;;;;24774:13;;24805:16;;;;24839:14;;;;24727:224;;;;;;;;;-1:-1:-1;24727:224:7;;24620:9;;;;;24727:224;;24774:13;;;;;24805:16;;;;;24839:14;;24871:10;;24899:18;;;;;24727:29;:224::i;:::-;24240:722;;;24972:11;;;23998:992;-1:-1:-1;;;23998:992:7:o;1717:148:14:-;1804:16;;;1818:1;1804:16;;;1777:11;1804:16;;;;;1777:11;1804:16;;;;;105:10:-1;1804:16:14;88:34:-1;136:17;;-1:-1;1804:16:14;1800:20;;1837:2;1830:1;1832;1830:4;;;;;;;;;;;;;;;;;;:9;1849:4;;1856:2;;1849:1;;1851;;1849:4;;;;;;;;;;;;;;:9;1717:148;;-1:-1:-1;;1717:148:14:o;24996:365:7:-;25071:12;25086:27;25102:10;25086:15;:27::i;:::-;25071:42;-1:-1:-1;25127:9:7;;25123:232;;;25188:16;:14;:16::i;:::-;25156:48;;:28;25173:10;25156:16;:28::i;:::-;:48;;;25152:193;;25231:25;;;;;;;;;;;;;;;;;;;25224:33;;;;;;;;;;;;;;;;;;;25231:25;;25224:33;;;;;;;;25231:25;25224:33;;25231:25;-1:-1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;25152:193:7;25303:26;;;;;;;;;;;;;;;;;;;25296:34;;;;;;;;;;;;;;;;;;;25303:26;;25296:34;;;;;;;;25303:26;25296:34;;25303:26;-1:-1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;25152:193:7;24996:365;;:::o;1447:123:32:-;615:24;:22;:24::i;:::-;646:25;;;;;;;;;;;;;;;;;;615:29;607:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;607:65:32;;1498;1546:16;:14;:16::i;:::-;345:66;;1498:65;:47;:65;:::i;:::-;1447:123::o;426:244:33:-;486:4;;506:21;;;;502:64;;;550:5;543:12;;;;502:64;-1:-1:-1;;662:1:33;617:20;;655:8;;426:244::o;813:149:14:-;897:11;927:28;939:2;931:11;;944:2;948;952;927:3;:28::i;379:134:39:-;490:15;;480:27::o;519:134::-;630:15;;620:27::o;4578:403:36:-;4708:91;;;4744:16;4708:91;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;4708:91:36;;;;;;;;25:18:-1;;61:17;;4708:91:36;182:15:-1;4744:25:36;179:29:-1;160:49;;4656:7:36;;;;4849:39;4744:6;4708:91;4849:12;:39::i;:::-;4915:28;;;;;;;;;;;;;;;;;4810:78;;-1:-1:-1;4810:78:36;-1:-1:-1;4898:46:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;4898:46:36;-1:-1:-1;4962:12:36;4578:403;-1:-1:-1;;;;;4578:403:36:o;3100:304::-;3232:101;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;3232:101:36;;;;;;;;25:18:-1;;61:17;;3232:101:36;182:15:-1;3268:17:36;179:29:-1;160:49;;3184:4:36;;3350:47;3372:6;3232:101;3350:21;:47::i;142:539:25:-;559:13;;575:2;559:18;639:26;;559:6;596:79::o;31171:565:7:-;31240:6;31293:29;;;:17;:29;;;;;;;31359:21;;;;31240:6;;;;31359:21;;;;;;31337:18;;;;;:43;31333:165;;-1:-1:-1;;31396:17:7;;;;31333:165;31613:16;;;;31590:40;;31613:16;31590:18;;;;;;31613:16;;;;31590:22;:40::i;:::-;31661:26;;;;31572:58;;-1:-1:-1;31661:40:7;;:26;;31572:58;31661:40;:30;:40;:::i;30162:185::-;30243:4;30297:7;30266:27;30286:6;30266:19;:27::i;:::-;:38;;:74;;;;-1:-1:-1;30308:5:7;;;:21;;;;;;:5;:21;;;;;;;;;30333:7;;30308:5;;;;;:13;;:21;;;;;;;;;;;;;;;;;;:5;:21;;;5:2:-1;;;;30:1;27;20:12;5:2;30308:21:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30308:21:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30308:21:7;:32;;;30162:185;-1:-1:-1;;;30162:185:7:o;30547:618::-;30639:26;;;30615:7;30639:26;;;:18;:26;;;;;;30615:7;;;;30639:26;;30638:27;30634:76;;;-1:-1:-1;;30681:18:7;;;;30634:76;30737:24;;;;;;;:16;:24;;;;;;;-1:-1:-1;30787:7:7;;30795:18;:16;:18::i;:::-;30787:27;;;;;;;;;;;;;;;;-1:-1:-1;30787:27:7;;;:50;;;;;:42;;:50;;;;;:59;;-1:-1:-1;31018:15:7;;;31014:54;;31056:1;31049:8;;;;31014:54;31144:14;;;30547:618;-1:-1:-1;;30547:618:7:o;926:144:37:-;999:15;926:144;:::o;25367:435:7:-;25647:7;25616:27;25636:6;25616:19;:27::i;:::-;25656:22;;;;;;;;;;;;;;;;;;-1:-1:-1;25616:38:7;25608:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;25608:71:7;;25689:106;25719:6;25727:9;25738:7;25747:10;25759:23;25784:10;25689:29;:106::i;:::-;25367:435;;;;;;:::o;188:149:38:-;283:20;;;;;;;;;;;;;;;;;240:6;;271:10;266:15;;;258:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;258:46:38;-1:-1:-1;328:1:38;;188:149;-1:-1:-1;188:149:38:o;27696:1339:7:-;27954:15;28000:37;28291:21;28349:31;28777:21;27972:18;:16;:18::i;:::-;27954:36;;28040:7;:17;28048:8;28040:17;;;;;;;;;;;;;;;:32;;:40;28073:6;28040:40;;;;;;;;;;;;;;;28000:80;;28094:9;28090:191;;;28143:21;;;;:34;;28169:7;28143:34;:25;:34;:::i;:::-;28119:21;;;:58;28090:191;;;28234:23;;:36;;28262:7;28234:36;:27;:36;:::i;:::-;28208:62;;28090:191;28315:21;;:23;;;;;;;;;;;;28291:47;;28383:12;:27;28396:13;28383:27;;;;;;;;;;;28349:61;;28440:6;28420:11;:17;;;:26;;;;;;;;;;;;;;;;;;28477:7;28456:11;:18;;;:28;;;;;;;;;;;;;;;;;;28519:9;28494:11;:22;;;:34;;;;;;;;;;;;;;;;;;28559:7;28538:11;:18;;:28;;;;28600:10;28576:11;:21;;:34;;;;28657:23;28620:11;:34;;;:60;;;;;;;;;;;;;;;;;;28709:16;:14;:16::i;:::-;28690;;;:35;;;;;;;;;;;28735:31;;;;;;;;;;;;-1:-1:-1;28801:17:7;;;28690:16;28801:17;;;;;-1:-1:-1;28832:25:7;;;28801:17;;-1:-1:-1;28832:43:7;28828:115;;;28891:25;;;:41;;;28828:115;28999:7;28958:70;;28973:13;28958:70;28988:9;29008:7;29017:10;28958:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;28958:70:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27696:1339;;;;;;;;;;;;:::o;800:1342:36:-;903:4;923:8;981:4;975:11;1403:4;1332:3;1281:9;1275:16;1234:4;1223:9;1219:20;1169:1;1120:5;1063:3;1041:415;1485:1;1476:7;1473:14;1470:2;;;1587:14;1672:55;;;;1806:4;1801:193;;;;1580:512;;1672:55;1708:1;1701:8;;1672:55;;1801:193;1974:1;1968:3;1962:10;1959:17;1952:24;;1580:512;;1470:2;-1:-1:-1;2132:3:36;;800:1342;-1:-1:-1;;;;800:1342:36:o;25946:503:7:-;26193:196;26225:5;26244:6;26264:9;26287:7;26308:10;26332:23;26369:10;26193:18;:196::i;:::-;26400:5;;;:42;;;;;;:5;:42;;;;;;;;;;;;;;;;;;;;;;:5;;;;;:14;;:42;;;;;;;;;;;:5;;:42;;;5:2:-1;;;;30:1;27;20:12;5:2;26400:42:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26400:42:7;;;;25946:503;;;;;;:::o;1028:119:39:-;1117:22;;1115:26::o;2056:210:14:-;2167:16;;;2181:1;2167:16;;;;;;;;;2140:11;;2167:16;;;17:15:-1;;105:10;2167:16:14;88:34:-1;136:17;;-1:-1;2167:16:14;2163:20;;2200:2;2193:1;2195;2193:4;;;;;;;;;;;;;;;;;;:9;2212:4;;2219:2;;2212:1;;2214;;2212:4;;;;;;;;;;;;;;:9;2231:4;;2238:2;;2231:1;;2233;;2231:4;;;;;;;;;;;;;;:9;2250:4;;2257:2;;2250:1;;2252;;2250:4;;;;;;;;;;;;;;:9;2056:210;;-1:-1:-1;;;;2056:210:14:o;2148:774:36:-;2255:4;2261:7;2284:12;2306:11;2367:4;2361:11;2741:4;2670:3;2619:9;2613:16;2572:4;2561:9;2557:20;2508:5;2451:3;2423:371;2412:382;;2823:1;2814:7;2811:14;2808:2;;;2857:3;2851:10;2844:17;;2808:2;-1:-1:-1;2902:7:36;;2911:3;;-1:-1:-1;2148:774:36;-1:-1:-1;;;2148:774:36:o;809:239:60:-;966:18;;;;;;;;;;;;;;;;;867:6;;911:11;897;;;911;;;897:25;;944:20;940:24;;932:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1928:170:59;2053:18;;;;;;;;;;;;;;;;;1988:7;;2019;;;;2044;;;;2036:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;",
  "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\";\nimport \"@aragon/os/contracts/common/SafeERC20.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    using SafeERC20 for ERC20;\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_SCHEDULED_PAYMENT = 0;\n    uint256 internal constant NO_TRANSACTION = 0;\n    uint256 internal constant MAX_SCHEDULED_PAYMENTS_PER_TX = 20;\n    uint256 internal constant MAX_UINT256 = uint256(-1);\n    uint64 internal constant MAX_UINT64 = uint64(-1);\n    uint64 internal constant MINIMUM_PERIOD = uint64(1 days);\n\n    string private constant ERROR_COMPLETE_TRANSITION = \"FINANCE_COMPLETE_TRANSITION\";\n    string private constant ERROR_NO_SCHEDULED_PAYMENT = \"FINANCE_NO_SCHEDULED_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_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_NEW_PAYMENT_INTERVAL_ZERO = \"FINANCE_NEW_PAYMENT_INTRVL_ZERO\";\n    string private constant ERROR_NEW_PAYMENT_EXECS_ZERO = \"FINANCE_NEW_PAYMENT_EXECS_ZERO\";\n    string private constant ERROR_NEW_PAYMENT_IMMEDIATE = \"FINANCE_NEW_PAYMENT_IMMEDIATE\";\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_ETH_VALUE_MISMATCH = \"FINANCE_ETH_VALUE_MISMATCH\";\n    string private constant ERROR_BUDGET = \"FINANCE_BUDGET\";\n    string private constant ERROR_EXECUTE_PAYMENT_NUM = \"FINANCE_EXECUTE_PAYMENT_NUM\";\n    string private constant ERROR_EXECUTE_PAYMENT_TIME = \"FINANCE_EXECUTE_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_TOKEN_APPROVE_FAILED = \"FINANCE_TKN_APPROVE_FAILED\";\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 ScheduledPayment {\n        address token;\n        address receiver;\n        address createdBy;\n        bool inactive;\n        uint256 amount;\n        uint64 initialPaymentTime;\n        uint64 interval;\n        uint64 maxExecutions;\n        uint64 executions;\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 paymentExecutionNumber;\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        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 => ScheduledPayment) internal scheduledPayments;\n    // Payments start at index 1, to allow us to use scheduledPayments[0] for transactions that are not\n    // linked to a scheduled 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 maxExecutions, string reference);\n    event NewTransaction(uint256 indexed transactionId, bool incoming, address indexed entity, uint256 amount, string reference);\n    event ChangePaymentState(uint256 indexed paymentId, bool active);\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 scheduledPaymentExists(uint256 _paymentId) {\n        require(_paymentId > 0 && _paymentId < paymentsNextIndex, ERROR_NO_SCHEDULED_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     * @notice Deposit ETH to the Vault, to avoid locking them in this Finance app forever\n     * @dev Send ETH to Vault. Send all the available balance.\n     */\n    function () external payable isInitialized transitionsPeriod {\n        require(msg.value > 0, ERROR_DEPOSIT_AMOUNT_ZERO);\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 >= MINIMUM_PERIOD, ERROR_SET_PERIOD_TOO_SHORT);\n        settings.periodDuration = _periodDuration;\n\n        // Reserve the first scheduled payment index as an unused index for transactions not linked\n        // to a scheduled payment\n        scheduledPayments[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    * @notice Deposit `@tokenAmount(_token, _amount)`\n    * @dev Deposit for approved ERC20 tokens or ETH\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        require(_amount > 0, ERROR_DEPOSIT_AMOUNT_ZERO);\n        if (_token == ETH) {\n            // Ensure that the ETH sent with the transaction equals the amount in the deposit\n            require(msg.value == _amount, ERROR_ETH_VALUE_MISMATCH);\n        }\n\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` for '`_reference`'\n    * @dev Note that this function is protected by the `CREATE_PAYMENTS_ROLE` but uses `MAX_UINT256`\n    *      as its interval auth parameter (as a sentinel value for \"never repeating\").\n    *      While this protects against most cases (you typically want to set a baseline requirement\n    *      for interval time), it does mean users will have to explicitly check for this case when\n    *      granting a permission that includes a upperbound requirement on the interval time.\n    * @param _token Address of token for payment\n    * @param _receiver Address that will receive payment\n    * @param _amount Tokens that are paid every time the payment is due\n    * @param _reference String detailing payment reason\n    */\n    function newImmediatePayment(address _token, address _receiver, uint256 _amount, string _reference)\n        external\n        // Use MAX_UINT256 as the interval parameter, as this payment will never repeat\n        // Payment time parameter is left as the last param as it was added later\n        authP(CREATE_PAYMENTS_ROLE, _arr(_token, _receiver, _amount, MAX_UINT256, uint256(1), getTimestamp()))\n        transitionsPeriod\n    {\n        require(_amount > 0, ERROR_NEW_PAYMENT_AMOUNT_ZERO);\n\n        _makePaymentTransaction(\n            _token,\n            _receiver,\n            _amount,\n            NO_SCHEDULED_PAYMENT,   // unrelated to any payment id; it isn't created\n            0,   // also unrelated to any payment executions\n            _reference\n        );\n    }\n\n    /**\n    * @notice Create a new payment of `@tokenAmount(_token, _amount)` to `_receiver` for `_reference`, executing `_maxExecutions` times at intervals of `@transformTime(_interval)`\n    * @dev See `newImmediatePayment()` for limitations on how the interval auth parameter can be used\n    * @param _token Address of token for payment\n    * @param _receiver Address that will receive payment\n    * @param _amount Tokens that are paid 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 _maxExecutions Maximum instances a payment can be executed\n    * @param _reference String detailing payment reason\n    */\n    function newScheduledPayment(\n        address _token,\n        address _receiver,\n        uint256 _amount,\n        uint64 _initialPaymentTime,\n        uint64 _interval,\n        uint64 _maxExecutions,\n        string _reference\n    )\n        external\n        // Payment time parameter is left as the last param as it was added later\n        authP(CREATE_PAYMENTS_ROLE, _arr(_token, _receiver, _amount, uint256(_interval), uint256(_maxExecutions), uint256(_initialPaymentTime)))\n        transitionsPeriod\n        returns (uint256 paymentId)\n    {\n        require(_amount > 0, ERROR_NEW_PAYMENT_AMOUNT_ZERO);\n        require(_interval > 0, ERROR_NEW_PAYMENT_INTERVAL_ZERO);\n        require(_maxExecutions > 0, ERROR_NEW_PAYMENT_EXECS_ZERO);\n\n        // Token budget must not be set at all or allow at least one instance of this payment each period\n        require(!settings.hasBudget[_token] || settings.budgets[_token] >= _amount, ERROR_BUDGET);\n\n        // Don't allow creating single payments that are immediately executable, use `newImmediatePayment()` instead\n        if (_maxExecutions == 1) {\n            require(_initialPaymentTime > getTimestamp64(), ERROR_NEW_PAYMENT_IMMEDIATE);\n        }\n\n        paymentId = paymentsNextIndex++;\n        emit NewPayment(paymentId, _receiver, _maxExecutions, _reference);\n\n        ScheduledPayment storage payment = scheduledPayments[paymentId];\n        payment.token = _token;\n        payment.receiver = _receiver;\n        payment.amount = _amount;\n        payment.initialPaymentTime = _initialPaymentTime;\n        payment.interval = _interval;\n        payment.maxExecutions = _maxExecutions;\n        payment.createdBy = msg.sender;\n\n        // We skip checking how many times the new payment was executed to allow creating new\n        // scheduled payments before having enough vault balance\n        _executePayment(paymentId);\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 >= MINIMUM_PERIOD, 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], uint256(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], uint256(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    * @notice Execute pending payment #`_paymentId`\n    * @dev Executes any payment (requires role)\n    * @param _paymentId Identifier for payment\n    */\n    function executePayment(uint256 _paymentId)\n        external\n        authP(EXECUTE_PAYMENTS_ROLE, arr(_paymentId, scheduledPayments[_paymentId].amount))\n        scheduledPaymentExists(_paymentId)\n        transitionsPeriod\n    {\n        _executePaymentAtLeastOnce(_paymentId);\n    }\n\n    /**\n    * @notice Execute pending payment #`_paymentId`\n    * @dev Always allow receiver of a payment to trigger execution\n    *      Initialization check is implicitly provided by `scheduledPaymentExists()` as new\n    *      scheduled payments can only be created via `newScheduledPayment(),` which requires initialization\n    * @param _paymentId Identifier for payment\n    */\n    function receiverExecutePayment(uint256 _paymentId) external scheduledPaymentExists(_paymentId) transitionsPeriod {\n        require(scheduledPayments[_paymentId].receiver == msg.sender, ERROR_PAYMENT_RECEIVER);\n        _executePaymentAtLeastOnce(_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        scheduledPaymentExists(_paymentId)\n    {\n        scheduledPayments[_paymentId].inactive = !_active;\n        emit ChangePaymentState(_paymentId, _active);\n    }\n\n    /**\n     * @notice Send tokens held in this contract to the Vault\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     * @param _token Token whose balance is going to be transferred.\n     */\n    function recoverToVault(address _token) external isInitialized transitionsPeriod {\n        uint256 amount = _token == ETH ? address(this).balance : ERC20(_token).staticBalanceOf(address(this));\n        require(amount > 0, ERROR_RECOVER_AMOUNT_ZERO);\n\n        _deposit(\n            _token,\n            amount,\n            \"Recover to Vault\",\n            address(this),\n            false\n        );\n    }\n\n    /**\n    * @notice Transition accounting period if needed\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    * @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) external isInitialized returns (bool success) {\n        return _tryTransitionAccountingPeriod(_maxTransitions);\n    }\n\n    // Getter fns\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        scheduledPaymentExists(_paymentId)\n        returns (\n            address token,\n            address receiver,\n            uint256 amount,\n            uint64 initialPaymentTime,\n            uint64 interval,\n            uint64 maxExecutions,\n            bool inactive,\n            uint64 executions,\n            address createdBy\n        )\n    {\n        ScheduledPayment storage payment = scheduledPayments[_paymentId];\n\n        token = payment.token;\n        receiver = payment.receiver;\n        amount = payment.amount;\n        initialPaymentTime = payment.initialPaymentTime;\n        interval = payment.interval;\n        maxExecutions = payment.maxExecutions;\n        executions = payment.executions;\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 paymentExecutionNumber,\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        paymentExecutionNumber = transaction.paymentExecutionNumber;\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    /**\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    /**\n    * @dev We have to check for initialization as periods are only valid after initializing\n    */\n    function getPeriodDuration() public view isInitialized returns (uint64) {\n        return settings.periodDuration;\n    }\n\n    /**\n    * @dev We have to check for initialization as budgets are only valid after initializing\n    */\n    function getBudget(address _token) public view isInitialized 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 budgets 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 budgets are only valid after initializing\n    */\n    function canMakePayment(address _token, uint256 _amount) public view isInitialized returns (bool) {\n        return _canMakePayment(_token, _amount);\n    }\n\n    /**\n    * @dev Initialization check is implicitly provided by `scheduledPaymentExists()` as new\n    *      scheduled payments can only be created via `newScheduledPayment(),` which requires initialization\n    */\n    function nextPaymentTime(uint256 _paymentId) public view scheduledPaymentExists(_paymentId) returns (uint64) {\n        return _nextPaymentTime(_paymentId);\n    }\n\n    // Internal fns\n\n    function _deposit(address _token, uint256 _amount, string _reference, address _sender, bool _isExternalDeposit) internal {\n        _recordIncomingTransaction(\n            _token,\n            _sender,\n            _amount,\n            _reference\n        );\n\n        if (_token == ETH) {\n            vault.deposit.value(_amount)(ETH, _amount);\n        } else {\n            // First, transfer the tokens to Finance if necessary\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                // This assumes the sender has approved the tokens for Finance\n                require(\n                    ERC20(_token).safeTransferFrom(msg.sender, address(this), _amount),\n                    ERROR_TOKEN_TRANSFER_FROM_REVERTED\n                );\n            }\n            // Approve the tokens for the Vault (it does the actual transferring)\n            require(ERC20(_token).safeApprove(vault, _amount), ERROR_TOKEN_APPROVE_FAILED);\n            // Finally, initiate the deposit\n            vault.deposit(_token, _amount);\n        }\n    }\n\n    function _executePayment(uint256 _paymentId) internal returns (uint256) {\n        ScheduledPayment storage payment = scheduledPayments[_paymentId];\n        require(!payment.inactive, ERROR_PAYMENT_INACTIVE);\n\n        uint64 paid = 0;\n        while (_nextPaymentTime(_paymentId) <= getTimestamp64() && paid < MAX_SCHEDULED_PAYMENTS_PER_TX) {\n            if (!_canMakePayment(payment.token, payment.amount)) {\n                emit PaymentFailure(_paymentId);\n                break;\n            }\n\n            // The while() predicate prevents these two from ever overflowing\n            payment.executions += 1;\n            paid += 1;\n\n            // We've already checked the remaining budget with `_canMakePayment()`\n            _unsafeMakePaymentTransaction(\n                payment.token,\n                payment.receiver,\n                payment.amount,\n                _paymentId,\n                payment.executions,\n                \"\"\n            );\n        }\n\n        return paid;\n    }\n\n    function _executePaymentAtLeastOnce(uint256 _paymentId) internal {\n        uint256 paid = _executePayment(_paymentId);\n        if (paid == 0) {\n            if (_nextPaymentTime(_paymentId) <= getTimestamp64()) {\n                revert(ERROR_EXECUTE_PAYMENT_NUM);\n            } else {\n                revert(ERROR_EXECUTE_PAYMENT_TIME);\n            }\n        }\n    }\n\n    function _makePaymentTransaction(\n        address _token,\n        address _receiver,\n        uint256 _amount,\n        uint256 _paymentId,\n        uint64 _paymentExecutionNumber,\n        string _reference\n    )\n        internal\n    {\n        require(_getRemainingBudget(_token) >= _amount, ERROR_REMAINING_BUDGET);\n        _unsafeMakePaymentTransaction(_token, _receiver, _amount, _paymentId, _paymentExecutionNumber, _reference);\n    }\n\n    /**\n    * @dev Unsafe version of _makePaymentTransaction that assumes you have already checked the\n    *      remaining budget\n    */\n    function _unsafeMakePaymentTransaction(\n        address _token,\n        address _receiver,\n        uint256 _amount,\n        uint256 _paymentId,\n        uint64 _paymentExecutionNumber,\n        string _reference\n    )\n        internal\n    {\n        _recordTransaction(\n            false,\n            _token,\n            _receiver,\n            _amount,\n            _paymentId,\n            _paymentExecutionNumber,\n            _reference\n        );\n\n        vault.transfer(_token, _receiver, _amount);\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 _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_SCHEDULED_PAYMENT, // unrelated to any existing payment\n            0, // and no payment executions\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 _paymentExecutionNumber,\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\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.paymentExecutionNumber = _paymentExecutionNumber;\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(uint64 _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            // We're already protected from underflowing above\n            _maxTransitions -= 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 _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    function _getRemainingBudget(address _token) internal view returns (uint256) {\n        if (!settings.hasBudget[_token]) {\n            return MAX_UINT256;\n        }\n\n        uint256 budget = settings.budgets[_token];\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 >= budget) {\n            return 0;\n        }\n\n        // We're already protected from the overflow above\n        return budget - spent;\n    }\n\n    function _nextPaymentTime(uint256 _paymentId) internal view returns (uint64) {\n        ScheduledPayment storage payment = scheduledPayments[_paymentId];\n\n        if (payment.executions >= payment.maxExecutions) {\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 circumvent linter warning\n        uint64 increase = payment.executions.mul(payment.interval);\n        uint64 nextPayment = payment.initialPaymentTime.add(increase);\n        return nextPayment;\n    }\n\n    // Syntax sugar\n\n    function _arr(address _a, address _b, uint256 _c, uint256 _d, uint256 _e, uint256 _f) internal pure returns (uint256[] r) {\n        r = new uint256[](6);\n        r[0] = uint256(_a);\n        r[1] = uint256(_b);\n        r[2] = _c;\n        r[3] = _d;\n        r[4] = _e;\n        r[5] = _f;\n    }\n\n    // Mocked fns (overrided during testing)\n    // Must be view for mocking purposes\n\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": [
        5528
      ]
    },
    "id": 5529,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 3493,
        "literals": [
          "solidity",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "57:23:7"
      },
      {
        "absolutePath": "@aragon/os/contracts/apps/AragonApp.sol",
        "file": "@aragon/os/contracts/apps/AragonApp.sol",
        "id": 3494,
        "nodeType": "ImportDirective",
        "scope": 5529,
        "sourceUnit": 10490,
        "src": "82:49:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/EtherTokenConstant.sol",
        "file": "@aragon/os/contracts/common/EtherTokenConstant.sol",
        "id": 3495,
        "nodeType": "ImportDirective",
        "scope": 5529,
        "sourceUnit": 10663,
        "src": "132:60:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/IsContract.sol",
        "file": "@aragon/os/contracts/common/IsContract.sol",
        "id": 3496,
        "nodeType": "ImportDirective",
        "scope": 5529,
        "sourceUnit": 10839,
        "src": "193:52:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/SafeERC20.sol",
        "file": "@aragon/os/contracts/common/SafeERC20.sol",
        "id": 3497,
        "nodeType": "ImportDirective",
        "scope": 5529,
        "sourceUnit": 11154,
        "src": "246:51:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/lib/token/ERC20.sol",
        "file": "@aragon/os/contracts/lib/token/ERC20.sol",
        "id": 3498,
        "nodeType": "ImportDirective",
        "scope": 5529,
        "sourceUnit": 14295,
        "src": "299:50:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/lib/math/SafeMath.sol",
        "file": "@aragon/os/contracts/lib/math/SafeMath.sol",
        "id": 3499,
        "nodeType": "ImportDirective",
        "scope": 5529,
        "sourceUnit": 14065,
        "src": "350:52:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/lib/math/SafeMath64.sol",
        "file": "@aragon/os/contracts/lib/math/SafeMath64.sol",
        "id": 3500,
        "nodeType": "ImportDirective",
        "scope": 5529,
        "sourceUnit": 14207,
        "src": "403:54:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/apps-vault/contracts/Vault.sol",
        "file": "@aragon/apps-vault/contracts/Vault.sol",
        "id": 3501,
        "nodeType": "ImportDirective",
        "scope": 5529,
        "sourceUnit": 7858,
        "src": "459:48:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 3502,
              "name": "EtherTokenConstant",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10662,
              "src": "530:18:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_EtherTokenConstant_$10662",
                "typeString": "contract EtherTokenConstant"
              }
            },
            "id": 3503,
            "nodeType": "InheritanceSpecifier",
            "src": "530:18:7"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 3504,
              "name": "IsContract",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10838,
              "src": "550:10:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IsContract_$10838",
                "typeString": "contract IsContract"
              }
            },
            "id": 3505,
            "nodeType": "InheritanceSpecifier",
            "src": "550:10:7"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 3506,
              "name": "AragonApp",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10489,
              "src": "562:9:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AragonApp_$10489",
                "typeString": "contract AragonApp"
              }
            },
            "id": 3507,
            "nodeType": "InheritanceSpecifier",
            "src": "562:9:7"
          }
        ],
        "contractDependencies": [
          9577,
          10365,
          10489,
          10502,
          10662,
          10712,
          10810,
          10838,
          10871,
          10908,
          11200,
          11422,
          11823,
          11850,
          13114
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 5528,
        "linearizedBaseContracts": [
          5528,
          10489,
          9577,
          11823,
          13114,
          11850,
          10908,
          11422,
          10838,
          10662,
          10712,
          10502,
          10871,
          10810,
          11200,
          10365
        ],
        "name": "Finance",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 3510,
            "libraryName": {
              "contractScope": null,
              "id": 3508,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 14064,
              "src": "584:8:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$14064",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "578:27:7",
            "typeName": {
              "id": 3509,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "597:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 3513,
            "libraryName": {
              "contractScope": null,
              "id": 3511,
              "name": "SafeMath64",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 14206,
              "src": "616:10:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath64_$14206",
                "typeString": "library SafeMath64"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "610:28:7",
            "typeName": {
              "id": 3512,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "631:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            }
          },
          {
            "id": 3516,
            "libraryName": {
              "contractScope": null,
              "id": 3514,
              "name": "SafeERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 11153,
              "src": "649:9:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeERC20_$11153",
                "typeString": "library SafeERC20"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "643:26:7",
            "typeName": {
              "contractScope": null,
              "id": 3515,
              "name": "ERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 14294,
              "src": "663:5:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20_$14294",
                "typeString": "contract ERC20"
              }
            }
          },
          {
            "constant": true,
            "id": 3521,
            "name": "CREATE_PAYMENTS_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "675:80:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 3517,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "675:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "4352454154455f5041594d454e54535f524f4c45",
                  "id": 3519,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "732:22:7",
                  "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": 3518,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 15147,
                "src": "722:9:7",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                  "typeString": "function () pure returns (bytes32)"
                }
              },
              "id": 3520,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "722:33:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3526,
            "name": "CHANGE_PERIOD_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "761:76:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 3522,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "761:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "4348414e47455f504552494f445f524f4c45",
                  "id": 3524,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "816:20:7",
                  "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": 3523,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 15147,
                "src": "806:9:7",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                  "typeString": "function () pure returns (bytes32)"
                }
              },
              "id": 3525,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "806:31:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3531,
            "name": "CHANGE_BUDGETS_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "843:78:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 3527,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "843:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "4348414e47455f425544474554535f524f4c45",
                  "id": 3529,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "899:21:7",
                  "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": 3528,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 15147,
                "src": "889:9:7",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                  "typeString": "function () pure returns (bytes32)"
                }
              },
              "id": 3530,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "889:32:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3536,
            "name": "EXECUTE_PAYMENTS_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "927:82:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 3532,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "927:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "455845435554455f5041594d454e54535f524f4c45",
                  "id": 3534,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "985:23:7",
                  "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": 3533,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 15147,
                "src": "975:9:7",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                  "typeString": "function () pure returns (bytes32)"
                }
              },
              "id": 3535,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "975:34:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3541,
            "name": "MANAGE_PAYMENTS_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "1015:80:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 3537,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1015:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "4d414e4147455f5041594d454e54535f524f4c45",
                  "id": 3539,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1072:22:7",
                  "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": 3538,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 15147,
                "src": "1062:9:7",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                  "typeString": "function () pure returns (bytes32)"
                }
              },
              "id": 3540,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1062:33:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3544,
            "name": "NO_SCHEDULED_PAYMENT",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "1102:50:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3542,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1102:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30",
              "id": 3543,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1151:1:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
              },
              "value": "0"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 3547,
            "name": "NO_TRANSACTION",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "1158:44:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3545,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1158:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30",
              "id": 3546,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1201:1:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
              },
              "value": "0"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 3550,
            "name": "MAX_SCHEDULED_PAYMENTS_PER_TX",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "1208:60:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3548,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1208:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3230",
              "id": 3549,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1266:2:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_20_by_1",
                "typeString": "int_const 20"
              },
              "value": "20"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 3556,
            "name": "MAX_UINT256",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "1274:51:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3551,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1274:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "id": 3554,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "nodeType": "UnaryOperation",
                  "operator": "-",
                  "prefix": true,
                  "src": "1322:2:7",
                  "subExpression": {
                    "argumentTypes": null,
                    "hexValue": "31",
                    "id": 3553,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1323:1:7",
                    "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": 3552,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1314:7:7",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_uint256_$",
                  "typeString": "type(uint256)"
                },
                "typeName": "uint256"
              },
              "id": 3555,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1314:11:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 3562,
            "name": "MAX_UINT64",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "1331:48:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 3557,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "1331:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "id": 3560,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "nodeType": "UnaryOperation",
                  "operator": "-",
                  "prefix": true,
                  "src": "1376:2:7",
                  "subExpression": {
                    "argumentTypes": null,
                    "hexValue": "31",
                    "id": 3559,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1377:1:7",
                    "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": 3558,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1369:6:7",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_uint64_$",
                  "typeString": "type(uint64)"
                },
                "typeName": "uint64"
              },
              "id": 3561,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1369:10:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 3567,
            "name": "MINIMUM_PERIOD",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "1385:56:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 3563,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "1385:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "31",
                  "id": 3565,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1434:6:7",
                  "subdenomination": "days",
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_86400_by_1",
                    "typeString": "int_const 86400"
                  },
                  "value": "1"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_rational_86400_by_1",
                    "typeString": "int_const 86400"
                  }
                ],
                "id": 3564,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1427:6:7",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_uint64_$",
                  "typeString": "type(uint64)"
                },
                "typeName": "uint64"
              },
              "id": 3566,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1427:14:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 3570,
            "name": "ERROR_COMPLETE_TRANSITION",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "1448:81:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3568,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1448:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f434f4d504c4554455f5452414e534954494f4e",
              "id": 3569,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1500:29:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_22ec6e0c3735a2fda2fb445836cfebb8537041a148155716f86965a81552ecaf",
                "typeString": "literal_string \"FINANCE_COMPLETE_TRANSITION\""
              },
              "value": "FINANCE_COMPLETE_TRANSITION"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3573,
            "name": "ERROR_NO_SCHEDULED_PAYMENT",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "1535:83:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3571,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1535:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f4e4f5f5343484544554c45445f5041594d454e54",
              "id": 3572,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1588:30:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_48242c9965a66807015fe42e1feb4465079fd12bf04a3a1b24570d2df6515b81",
                "typeString": "literal_string \"FINANCE_NO_SCHEDULED_PAYMENT\""
              },
              "value": "FINANCE_NO_SCHEDULED_PAYMENT"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3576,
            "name": "ERROR_NO_TRANSACTION",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "1624:71:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3574,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1624:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f4e4f5f5452414e53414354494f4e",
              "id": 3575,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1671:24:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_b1e87dfa63a7fa93fbf96eab40f01b7e057a0ce0eb12da8a36d7a9b3584faaea",
                "typeString": "literal_string \"FINANCE_NO_TRANSACTION\""
              },
              "value": "FINANCE_NO_TRANSACTION"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3579,
            "name": "ERROR_NO_PERIOD",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "1701:61:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3577,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1701:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f4e4f5f504552494f44",
              "id": 3578,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1743:19:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_d1c462d5c2112fe4829843683286df794144b893d493bfb3a201b032dcb0798d",
                "typeString": "literal_string \"FINANCE_NO_PERIOD\""
              },
              "value": "FINANCE_NO_PERIOD"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3582,
            "name": "ERROR_VAULT_NOT_CONTRACT",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "1768:79:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3580,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1768:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f5641554c545f4e4f545f434f4e5452414354",
              "id": 3581,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1819:28:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_4f6ce1beb4b1acc923ed553912415389acce4c55b09f8dc923ab624929c3ac7c",
                "typeString": "literal_string \"FINANCE_VAULT_NOT_CONTRACT\""
              },
              "value": "FINANCE_VAULT_NOT_CONTRACT"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3585,
            "name": "ERROR_SET_PERIOD_TOO_SHORT",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "1853:83:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3583,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1853:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f5345545f504552494f445f544f4f5f53484f5254",
              "id": 3584,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1906:30:7",
              "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": 3588,
            "name": "ERROR_NEW_PAYMENT_AMOUNT_ZERO",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "1942:89:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3586,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1942:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f4e45575f5041594d454e545f414d4f554e545f5a45524f",
              "id": 3587,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1998:33:7",
              "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": 3591,
            "name": "ERROR_NEW_PAYMENT_INTERVAL_ZERO",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "2037:91:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3589,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2037:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f4e45575f5041594d454e545f494e5452564c5f5a45524f",
              "id": 3590,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2095:33:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_1f5cef8d0dc37cb952f9621441971350ae577676082774725adafac3a98c5fd6",
                "typeString": "literal_string \"FINANCE_NEW_PAYMENT_INTRVL_ZERO\""
              },
              "value": "FINANCE_NEW_PAYMENT_INTRVL_ZERO"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3594,
            "name": "ERROR_NEW_PAYMENT_EXECS_ZERO",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "2134:87:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3592,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2134:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f4e45575f5041594d454e545f45584543535f5a45524f",
              "id": 3593,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2189:32:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_07ec39532a2245c10fe0f0814a1968914bbb9bf138d1bf6515c0eb7f2367194f",
                "typeString": "literal_string \"FINANCE_NEW_PAYMENT_EXECS_ZERO\""
              },
              "value": "FINANCE_NEW_PAYMENT_EXECS_ZERO"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3597,
            "name": "ERROR_NEW_PAYMENT_IMMEDIATE",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "2227:85:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3595,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2227:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f4e45575f5041594d454e545f494d4d454449415445",
              "id": 3596,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2281:31:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_f0500f0ff3ac1dd20be6d9e9ff72effb99285a08e7b31d52820c22d20213d716",
                "typeString": "literal_string \"FINANCE_NEW_PAYMENT_IMMEDIATE\""
              },
              "value": "FINANCE_NEW_PAYMENT_IMMEDIATE"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3600,
            "name": "ERROR_RECOVER_AMOUNT_ZERO",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "2318:81:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3598,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2318:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f5245434f5645525f414d4f554e545f5a45524f",
              "id": 3599,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2370:29:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_887cdae74ca676db86e5ff884d1ed487026a75a5ff2e355b97032d51731277ea",
                "typeString": "literal_string \"FINANCE_RECOVER_AMOUNT_ZERO\""
              },
              "value": "FINANCE_RECOVER_AMOUNT_ZERO"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3603,
            "name": "ERROR_DEPOSIT_AMOUNT_ZERO",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "2405:81:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3601,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2405:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f4445504f5349545f414d4f554e545f5a45524f",
              "id": 3602,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2457:29:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_6610a3bc46bba63f677fa7f08e3ad8e90ebdf9830290f8fc7b863aca074b39e4",
                "typeString": "literal_string \"FINANCE_DEPOSIT_AMOUNT_ZERO\""
              },
              "value": "FINANCE_DEPOSIT_AMOUNT_ZERO"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3606,
            "name": "ERROR_ETH_VALUE_MISMATCH",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "2492:79:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3604,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2492:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f4554485f56414c55455f4d49534d41544348",
              "id": 3605,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2543:28:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_1ccc088cc9b25ca98929821b5e593c6823fe3548d9e37efa7850333b79341ca5",
                "typeString": "literal_string \"FINANCE_ETH_VALUE_MISMATCH\""
              },
              "value": "FINANCE_ETH_VALUE_MISMATCH"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3609,
            "name": "ERROR_BUDGET",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "2577:55:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3607,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2577:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f425544474554",
              "id": 3608,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2616:16:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_a3b0fd663c3f091445c9d2b484685b6976e216ee84e292e1bc26c5f6eb18212d",
                "typeString": "literal_string \"FINANCE_BUDGET\""
              },
              "value": "FINANCE_BUDGET"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3612,
            "name": "ERROR_EXECUTE_PAYMENT_NUM",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "2638:81:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3610,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2638:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f455845435554455f5041594d454e545f4e554d",
              "id": 3611,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2690:29:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_49476d78bf03e8ab7a07c0a096caacc3405517496bf2509dbf38f14686eec113",
                "typeString": "literal_string \"FINANCE_EXECUTE_PAYMENT_NUM\""
              },
              "value": "FINANCE_EXECUTE_PAYMENT_NUM"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3615,
            "name": "ERROR_EXECUTE_PAYMENT_TIME",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "2725:83:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3613,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2725:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f455845435554455f5041594d454e545f54494d45",
              "id": 3614,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2778:30:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_c1a736e94274378373cef5c66f5657bcfa50659c24581a0a4bfa668c04678317",
                "typeString": "literal_string \"FINANCE_EXECUTE_PAYMENT_TIME\""
              },
              "value": "FINANCE_EXECUTE_PAYMENT_TIME"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3618,
            "name": "ERROR_PAYMENT_RECEIVER",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "2814:75:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3616,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2814:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f5041594d454e545f5245434549564552",
              "id": 3617,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2863:26:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_e67182ceb919bc28f0bcb16889270f6f64025682424ceb6843d8119099dbeace",
                "typeString": "literal_string \"FINANCE_PAYMENT_RECEIVER\""
              },
              "value": "FINANCE_PAYMENT_RECEIVER"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3621,
            "name": "ERROR_TOKEN_TRANSFER_FROM_REVERTED",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "2895:95:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3619,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2895:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f544b4e5f5452414e534645525f46524f4d5f524556455254",
              "id": 3620,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2956:34:7",
              "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": 3624,
            "name": "ERROR_TOKEN_APPROVE_FAILED",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "2996:81:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3622,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2996:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f544b4e5f415050524f56455f4641494c4544",
              "id": 3623,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3049:28:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_d77d3db2060bb072bb140e0fdca0660dd25613d6b3fabbcc609bc10d926b1f2c",
                "typeString": "literal_string \"FINANCE_TKN_APPROVE_FAILED\""
              },
              "value": "FINANCE_TKN_APPROVE_FAILED"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3627,
            "name": "ERROR_PAYMENT_INACTIVE",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "3083:75:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3625,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "3083:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f5041594d454e545f494e414354495645",
              "id": 3626,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3132:26:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_fb1c85406dbe021dd2fbe569dc1b5134d310d7a785d47610fefcc3150d54bbd0",
                "typeString": "literal_string \"FINANCE_PAYMENT_INACTIVE\""
              },
              "value": "FINANCE_PAYMENT_INACTIVE"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3630,
            "name": "ERROR_REMAINING_BUDGET",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "3164:75:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3628,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "3164:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f52454d41494e494e475f425544474554",
              "id": 3629,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3213:26:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_2e378b1bab04e94af1aa86ea6fa9f5c8d9dee3ed82f1b4706d4b3e19e606de9c",
                "typeString": "literal_string \"FINANCE_REMAINING_BUDGET\""
              },
              "value": "FINANCE_REMAINING_BUDGET"
            },
            "visibility": "private"
          },
          {
            "canonicalName": "Finance.ScheduledPayment",
            "id": 3649,
            "members": [
              {
                "constant": false,
                "id": 3632,
                "name": "token",
                "nodeType": "VariableDeclaration",
                "scope": 3649,
                "src": "3315:13:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 3631,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "3315:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3634,
                "name": "receiver",
                "nodeType": "VariableDeclaration",
                "scope": 3649,
                "src": "3338:16:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 3633,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "3338:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3636,
                "name": "createdBy",
                "nodeType": "VariableDeclaration",
                "scope": 3649,
                "src": "3364:17:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 3635,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "3364:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3638,
                "name": "inactive",
                "nodeType": "VariableDeclaration",
                "scope": 3649,
                "src": "3391:13:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 3637,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "3391:4:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3640,
                "name": "amount",
                "nodeType": "VariableDeclaration",
                "scope": 3649,
                "src": "3414:14:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3639,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3414:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3642,
                "name": "initialPaymentTime",
                "nodeType": "VariableDeclaration",
                "scope": 3649,
                "src": "3438:25:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 3641,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3438:6:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3644,
                "name": "interval",
                "nodeType": "VariableDeclaration",
                "scope": 3649,
                "src": "3473:15:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 3643,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3473:6:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3646,
                "name": "maxExecutions",
                "nodeType": "VariableDeclaration",
                "scope": 3649,
                "src": "3498:20:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 3645,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3498:6:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3648,
                "name": "executions",
                "nodeType": "VariableDeclaration",
                "scope": 3649,
                "src": "3528:17:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 3647,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3528:6:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "ScheduledPayment",
            "nodeType": "StructDefinition",
            "scope": 5528,
            "src": "3281:271:7",
            "visibility": "public"
          },
          {
            "canonicalName": "Finance.Transaction",
            "id": 3666,
            "members": [
              {
                "constant": false,
                "id": 3651,
                "name": "token",
                "nodeType": "VariableDeclaration",
                "scope": 3666,
                "src": "3622:13:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 3650,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "3622:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3653,
                "name": "entity",
                "nodeType": "VariableDeclaration",
                "scope": 3666,
                "src": "3645:14:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 3652,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "3645:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3655,
                "name": "isIncoming",
                "nodeType": "VariableDeclaration",
                "scope": 3666,
                "src": "3669:15:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 3654,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "3669:4:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3657,
                "name": "amount",
                "nodeType": "VariableDeclaration",
                "scope": 3666,
                "src": "3694:14:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3656,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3694:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3659,
                "name": "paymentId",
                "nodeType": "VariableDeclaration",
                "scope": 3666,
                "src": "3718:17:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3658,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3718:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3661,
                "name": "paymentExecutionNumber",
                "nodeType": "VariableDeclaration",
                "scope": 3666,
                "src": "3745:29:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 3660,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3745:6:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3663,
                "name": "date",
                "nodeType": "VariableDeclaration",
                "scope": 3666,
                "src": "3784:11:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 3662,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3784:6:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3665,
                "name": "periodId",
                "nodeType": "VariableDeclaration",
                "scope": 3666,
                "src": "3805:15:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 3664,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3805:6:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Transaction",
            "nodeType": "StructDefinition",
            "scope": 5528,
            "src": "3593:234:7",
            "visibility": "public"
          },
          {
            "canonicalName": "Finance.TokenStatement",
            "id": 3671,
            "members": [
              {
                "constant": false,
                "id": 3668,
                "name": "expenses",
                "nodeType": "VariableDeclaration",
                "scope": 3671,
                "src": "3865:16:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3667,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3865:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3670,
                "name": "income",
                "nodeType": "VariableDeclaration",
                "scope": 3671,
                "src": "3891:14:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3669,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3891:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "TokenStatement",
            "nodeType": "StructDefinition",
            "scope": 5528,
            "src": "3833:79:7",
            "visibility": "public"
          },
          {
            "canonicalName": "Finance.Period",
            "id": 3684,
            "members": [
              {
                "constant": false,
                "id": 3673,
                "name": "startTime",
                "nodeType": "VariableDeclaration",
                "scope": 3684,
                "src": "3942:16:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 3672,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3942:6:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3675,
                "name": "endTime",
                "nodeType": "VariableDeclaration",
                "scope": 3684,
                "src": "3968:14:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 3674,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3968:6:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3677,
                "name": "firstTransactionId",
                "nodeType": "VariableDeclaration",
                "scope": 3684,
                "src": "3992:26:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3676,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3992:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3679,
                "name": "lastTransactionId",
                "nodeType": "VariableDeclaration",
                "scope": 3684,
                "src": "4028:25:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3678,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "4028:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3683,
                "name": "tokenStatement",
                "nodeType": "VariableDeclaration",
                "scope": 3684,
                "src": "4063:50:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TokenStatement_$3671_storage_$",
                  "typeString": "mapping(address => struct Finance.TokenStatement)"
                },
                "typeName": {
                  "id": 3682,
                  "keyType": {
                    "id": 3680,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4072:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "4063:35:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TokenStatement_$3671_storage_$",
                    "typeString": "mapping(address => struct Finance.TokenStatement)"
                  },
                  "valueType": {
                    "contractScope": null,
                    "id": 3681,
                    "name": "TokenStatement",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3671,
                    "src": "4083:14:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TokenStatement_$3671_storage_ptr",
                      "typeString": "struct Finance.TokenStatement"
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Period",
            "nodeType": "StructDefinition",
            "scope": 5528,
            "src": "3918:202:7",
            "visibility": "public"
          },
          {
            "canonicalName": "Finance.Settings",
            "id": 3695,
            "members": [
              {
                "constant": false,
                "id": 3686,
                "name": "periodDuration",
                "nodeType": "VariableDeclaration",
                "scope": 3695,
                "src": "4152:21:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 3685,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "4152:6:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3690,
                "name": "budgets",
                "nodeType": "VariableDeclaration",
                "scope": 3695,
                "src": "4183:36:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                  "typeString": "mapping(address => uint256)"
                },
                "typeName": {
                  "id": 3689,
                  "keyType": {
                    "id": 3687,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4192:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "4183:28:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "valueType": {
                    "id": 3688,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4203:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3694,
                "name": "hasBudget",
                "nodeType": "VariableDeclaration",
                "scope": 3695,
                "src": "4229:35:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                  "typeString": "mapping(address => bool)"
                },
                "typeName": {
                  "id": 3693,
                  "keyType": {
                    "id": 3691,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4238:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "4229:25:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                    "typeString": "mapping(address => bool)"
                  },
                  "valueType": {
                    "id": 3692,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4249:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Settings",
            "nodeType": "StructDefinition",
            "scope": 5528,
            "src": "4126:145:7",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3697,
            "name": "vault",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "4277:18:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Vault_$7857",
              "typeString": "contract Vault"
            },
            "typeName": {
              "contractScope": null,
              "id": 3696,
              "name": "Vault",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 7857,
              "src": "4277:5:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Vault_$7857",
                "typeString": "contract Vault"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3699,
            "name": "settings",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "4301:26:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Settings_$3695_storage",
              "typeString": "struct Finance.Settings"
            },
            "typeName": {
              "contractScope": null,
              "id": 3698,
              "name": "Settings",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3695,
              "src": "4301:8:7",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Settings_$3695_storage_ptr",
                "typeString": "struct Finance.Settings"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 3703,
            "name": "scheduledPayments",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "4423:64:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ScheduledPayment_$3649_storage_$",
              "typeString": "mapping(uint256 => struct Finance.ScheduledPayment)"
            },
            "typeName": {
              "id": 3702,
              "keyType": {
                "id": 3700,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "4432:7:7",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "4423:37:7",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ScheduledPayment_$3649_storage_$",
                "typeString": "mapping(uint256 => struct Finance.ScheduledPayment)"
              },
              "valueType": {
                "contractScope": null,
                "id": 3701,
                "name": "ScheduledPayment",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 3649,
                "src": "4443:16:7",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                  "typeString": "struct Finance.ScheduledPayment"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 3705,
            "name": "paymentsNextIndex",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "4634:32:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3704,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "4634:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3709,
            "name": "transactions",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "4673:54:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Transaction_$3666_storage_$",
              "typeString": "mapping(uint256 => struct Finance.Transaction)"
            },
            "typeName": {
              "id": 3708,
              "keyType": {
                "id": 3706,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "4682:7:7",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "4673:32:7",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Transaction_$3666_storage_$",
                "typeString": "mapping(uint256 => struct Finance.Transaction)"
              },
              "valueType": {
                "contractScope": null,
                "id": 3707,
                "name": "Transaction",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 3666,
                "src": "4693:11:7",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                  "typeString": "struct Finance.Transaction"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 3711,
            "name": "transactionsNextIndex",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "4733:36:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3710,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "4733:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3715,
            "name": "periods",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "4776:43:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$3684_storage_$",
              "typeString": "mapping(uint64 => struct Finance.Period)"
            },
            "typeName": {
              "id": 3714,
              "keyType": {
                "id": 3712,
                "name": "uint64",
                "nodeType": "ElementaryTypeName",
                "src": "4785:6:7",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                }
              },
              "nodeType": "Mapping",
              "src": "4776:26:7",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$3684_storage_$",
                "typeString": "mapping(uint64 => struct Finance.Period)"
              },
              "valueType": {
                "contractScope": null,
                "id": 3713,
                "name": "Period",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 3684,
                "src": "4795:6:7",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                  "typeString": "struct Finance.Period"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 3717,
            "name": "periodsLength",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "4825:27:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 3716,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "4825:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3725,
            "name": "NewPeriod",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3724,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3719,
                  "indexed": true,
                  "name": "periodId",
                  "nodeType": "VariableDeclaration",
                  "scope": 3725,
                  "src": "4875:23:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3718,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "4875:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3721,
                  "indexed": false,
                  "name": "periodStarts",
                  "nodeType": "VariableDeclaration",
                  "scope": 3725,
                  "src": "4900:19:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3720,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "4900:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3723,
                  "indexed": false,
                  "name": "periodEnds",
                  "nodeType": "VariableDeclaration",
                  "scope": 3725,
                  "src": "4921:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3722,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "4921:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4874:65:7"
            },
            "src": "4859:81:7"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3733,
            "name": "SetBudget",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3732,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3727,
                  "indexed": true,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 3733,
                  "src": "4961:21:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3726,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4961:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3729,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 3733,
                  "src": "4984:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3728,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4984:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3731,
                  "indexed": false,
                  "name": "hasBudget",
                  "nodeType": "VariableDeclaration",
                  "scope": 3733,
                  "src": "5000:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3730,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5000:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4960:55:7"
            },
            "src": "4945:71:7"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3743,
            "name": "NewPayment",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3742,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3735,
                  "indexed": true,
                  "name": "paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 3743,
                  "src": "5038:25:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3734,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5038:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3737,
                  "indexed": true,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 3743,
                  "src": "5065:25:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3736,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5065:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3739,
                  "indexed": false,
                  "name": "maxExecutions",
                  "nodeType": "VariableDeclaration",
                  "scope": 3743,
                  "src": "5092:20:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3738,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "5092:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3741,
                  "indexed": false,
                  "name": "reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 3743,
                  "src": "5114:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3740,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5114:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5037:94:7"
            },
            "src": "5021:111:7"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3755,
            "name": "NewTransaction",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3754,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3745,
                  "indexed": true,
                  "name": "transactionId",
                  "nodeType": "VariableDeclaration",
                  "scope": 3755,
                  "src": "5158:29:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3744,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5158:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3747,
                  "indexed": false,
                  "name": "incoming",
                  "nodeType": "VariableDeclaration",
                  "scope": 3755,
                  "src": "5189:13:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3746,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5189:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3749,
                  "indexed": true,
                  "name": "entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 3755,
                  "src": "5204:22:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3748,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5204:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3751,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 3755,
                  "src": "5228:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3750,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5228:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3753,
                  "indexed": false,
                  "name": "reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 3755,
                  "src": "5244:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3752,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5244:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5157:104:7"
            },
            "src": "5137:125:7"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3761,
            "name": "ChangePaymentState",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3760,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3757,
                  "indexed": true,
                  "name": "paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 3761,
                  "src": "5292:25:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3756,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5292:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3759,
                  "indexed": false,
                  "name": "active",
                  "nodeType": "VariableDeclaration",
                  "scope": 3761,
                  "src": "5319:11:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3758,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5319:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5291:40:7"
            },
            "src": "5267:65:7"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3765,
            "name": "ChangePeriodDuration",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3764,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3763,
                  "indexed": false,
                  "name": "newDuration",
                  "nodeType": "VariableDeclaration",
                  "scope": 3765,
                  "src": "5364:18:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3762,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "5364:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5363:20:7"
            },
            "src": "5337:47:7"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3769,
            "name": "PaymentFailure",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3768,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3767,
                  "indexed": false,
                  "name": "paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 3769,
                  "src": "5410:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3766,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5410:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5409:19:7"
            },
            "src": "5389:40:7"
          },
          {
            "body": {
              "id": 3784,
              "nodeType": "Block",
              "src": "5673:175:7",
              "statements": [
                {
                  "assignments": [
                    3772
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3772,
                      "name": "completeTransition",
                      "nodeType": "VariableDeclaration",
                      "scope": 3785,
                      "src": "5683:23:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 3771,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "5683:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3777,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 3774,
                          "name": "getMaxPeriodTransitions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5527,
                          "src": "5740:23:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                            "typeString": "function () view returns (uint64)"
                          }
                        },
                        "id": 3775,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5740:25:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 3773,
                      "name": "_tryTransitionAccountingPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5331,
                      "src": "5709:30:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint64_$returns$_t_bool_$",
                        "typeString": "function (uint64) returns (bool)"
                      }
                    },
                    "id": 3776,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5709:57:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5683:83:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3779,
                        "name": "completeTransition",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3772,
                        "src": "5784:18:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3780,
                        "name": "ERROR_COMPLETE_TRANSITION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3570,
                        "src": "5804:25:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 3778,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "5776:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3781,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5776:54:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3782,
                  "nodeType": "ExpressionStatement",
                  "src": "5776:54:7"
                },
                {
                  "id": 3783,
                  "nodeType": "PlaceholderStatement",
                  "src": "5840:1:7"
                }
              ]
            },
            "documentation": null,
            "id": 3785,
            "name": "transitionsPeriod",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 3770,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5673:0:7"
            },
            "src": "5646:202:7",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3801,
              "nodeType": "Block",
              "src": "5906:113:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 3796,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3792,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 3790,
                            "name": "_paymentId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3787,
                            "src": "5924:10:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 3791,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5937:1:7",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "5924:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3795,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 3793,
                            "name": "_paymentId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3787,
                            "src": "5942:10:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 3794,
                            "name": "paymentsNextIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3705,
                            "src": "5955:17:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5942:30:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "5924:48:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3797,
                        "name": "ERROR_NO_SCHEDULED_PAYMENT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3573,
                        "src": "5974:26:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 3789,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "5916:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3798,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5916:85:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3799,
                  "nodeType": "ExpressionStatement",
                  "src": "5916:85:7"
                },
                {
                  "id": 3800,
                  "nodeType": "PlaceholderStatement",
                  "src": "6011:1:7"
                }
              ]
            },
            "documentation": null,
            "id": 3802,
            "name": "scheduledPaymentExists",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 3788,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3787,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 3802,
                  "src": "5886:18:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3786,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5886:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5885:20:7"
            },
            "src": "5854:165:7",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3818,
              "nodeType": "Block",
              "src": "6076:119:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 3813,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3809,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 3807,
                            "name": "_transactionId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3804,
                            "src": "6094:14:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 3808,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6111:1:7",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "6094:18:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3812,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 3810,
                            "name": "_transactionId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3804,
                            "src": "6116:14:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 3811,
                            "name": "transactionsNextIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3711,
                            "src": "6133:21:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6116:38:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "6094:60:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3814,
                        "name": "ERROR_NO_TRANSACTION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3576,
                        "src": "6156:20:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 3806,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "6086:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3815,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6086:91:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3816,
                  "nodeType": "ExpressionStatement",
                  "src": "6086:91:7"
                },
                {
                  "id": 3817,
                  "nodeType": "PlaceholderStatement",
                  "src": "6187:1:7"
                }
              ]
            },
            "documentation": null,
            "id": 3819,
            "name": "transactionExists",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 3805,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3804,
                  "name": "_transactionId",
                  "nodeType": "VariableDeclaration",
                  "scope": 3819,
                  "src": "6052:22:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3803,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6052:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6051:24:7"
            },
            "src": "6025:170:7",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3831,
              "nodeType": "Block",
              "src": "6241:79:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 3826,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3824,
                          "name": "_periodId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3821,
                          "src": "6259:9:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3825,
                          "name": "periodsLength",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3717,
                          "src": "6271:13:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "6259:25:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3827,
                        "name": "ERROR_NO_PERIOD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3579,
                        "src": "6286:15:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 3823,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "6251:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3828,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6251:51:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3829,
                  "nodeType": "ExpressionStatement",
                  "src": "6251:51:7"
                },
                {
                  "id": 3830,
                  "nodeType": "PlaceholderStatement",
                  "src": "6312:1:7"
                }
              ]
            },
            "documentation": null,
            "id": 3832,
            "name": "periodExists",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 3822,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3821,
                  "name": "_periodId",
                  "nodeType": "VariableDeclaration",
                  "scope": 3832,
                  "src": "6223:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3820,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "6223:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6222:18:7"
            },
            "src": "6201:119:7",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3857,
              "nodeType": "Block",
              "src": "6557:221:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3843,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3840,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15153,
                            "src": "6575:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 3841,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "6575:9:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 3842,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6587:1:7",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "6575:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3844,
                        "name": "ERROR_DEPOSIT_AMOUNT_ZERO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3603,
                        "src": "6590:25:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 3839,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "6567:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3845,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6567:49:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3846,
                  "nodeType": "ExpressionStatement",
                  "src": "6567:49:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3848,
                        "name": "ETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10661,
                        "src": "6648:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3849,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15153,
                          "src": "6665:3:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3850,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6665:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4574686572207472616e7366657220746f2046696e616e636520617070",
                        "id": 3851,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6688:31:7",
                        "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": 3852,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15153,
                          "src": "6733:3:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3853,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6733:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "74727565",
                        "id": 3854,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6757:4:7",
                        "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": 3847,
                      "name": "_deposit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4866,
                      "src": "6626:8:7",
                      "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": 3855,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6626:145:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3856,
                  "nodeType": "ExpressionStatement",
                  "src": "6626:145:7"
                }
              ]
            },
            "documentation": "@notice Deposit ETH to the Vault, to avoid locking them in this Finance app forever\n@dev Send ETH to Vault. Send all the available balance.",
            "id": 3858,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 3835,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3834,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10752,
                  "src": "6525:13:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6525:13:7"
              },
              {
                "arguments": null,
                "id": 3837,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3836,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3785,
                  "src": "6539:17:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6539:17:7"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3833,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6505:2:7"
            },
            "payable": true,
            "returnParameters": {
              "id": 3838,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6557:0:7"
            },
            "scope": 5528,
            "src": "6496:282:7",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3914,
              "nodeType": "Block",
              "src": "7133:670:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 3867,
                      "name": "initialized",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10795,
                      "src": "7143:11:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 3868,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7143:13:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3869,
                  "nodeType": "ExpressionStatement",
                  "src": "7143:13:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3872,
                            "name": "_vault",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3860,
                            "src": "7186:6:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Vault_$7857",
                              "typeString": "contract Vault"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Vault_$7857",
                              "typeString": "contract Vault"
                            }
                          ],
                          "id": 3871,
                          "name": "isContract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10837,
                          "src": "7175:10:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 3873,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7175:18:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3874,
                        "name": "ERROR_VAULT_NOT_CONTRACT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3582,
                        "src": "7195:24:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 3870,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "7167:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3875,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7167:53:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3876,
                  "nodeType": "ExpressionStatement",
                  "src": "7167:53:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3879,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3877,
                      "name": "vault",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3697,
                      "src": "7230:5:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Vault_$7857",
                        "typeString": "contract Vault"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3878,
                      "name": "_vault",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3860,
                      "src": "7238:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Vault_$7857",
                        "typeString": "contract Vault"
                      }
                    },
                    "src": "7230:14:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Vault_$7857",
                      "typeString": "contract Vault"
                    }
                  },
                  "id": 3880,
                  "nodeType": "ExpressionStatement",
                  "src": "7230:14:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 3884,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3882,
                          "name": "_periodDuration",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3862,
                          "src": "7263:15:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3883,
                          "name": "MINIMUM_PERIOD",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3567,
                          "src": "7282:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "7263:33:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3885,
                        "name": "ERROR_SET_PERIOD_TOO_SHORT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3585,
                        "src": "7298:26:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 3881,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "7255:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3886,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7255:70:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3887,
                  "nodeType": "ExpressionStatement",
                  "src": "7255:70:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3892,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3888,
                        "name": "settings",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3699,
                        "src": "7335:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Settings_$3695_storage",
                          "typeString": "struct Finance.Settings storage ref"
                        }
                      },
                      "id": 3890,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "periodDuration",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3686,
                      "src": "7335:23:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3891,
                      "name": "_periodDuration",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3862,
                      "src": "7361:15:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "7335:41:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 3893,
                  "nodeType": "ExpressionStatement",
                  "src": "7335:41:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3899,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 3894,
                          "name": "scheduledPayments",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3703,
                          "src": "7521:17:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ScheduledPayment_$3649_storage_$",
                            "typeString": "mapping(uint256 => struct Finance.ScheduledPayment storage ref)"
                          }
                        },
                        "id": 3896,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 3895,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7539:1:7",
                          "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": "7521:20:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage",
                          "typeString": "struct Finance.ScheduledPayment storage ref"
                        }
                      },
                      "id": 3897,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "inactive",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3638,
                      "src": "7521:29:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 3898,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7553:4:7",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "7521:36:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3900,
                  "nodeType": "ExpressionStatement",
                  "src": "7521:36:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3903,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3901,
                      "name": "paymentsNextIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3705,
                      "src": "7567:17:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 3902,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7587:1:7",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "7567:21:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3904,
                  "nodeType": "ExpressionStatement",
                  "src": "7567:21:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3907,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3905,
                      "name": "transactionsNextIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3711,
                      "src": "7698:21:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 3906,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7722:1:7",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "7698:25:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3908,
                  "nodeType": "ExpressionStatement",
                  "src": "7698:25:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 3910,
                          "name": "getTimestamp64",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11199,
                          "src": "7779:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                            "typeString": "function () view returns (uint64)"
                          }
                        },
                        "id": 3911,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7779:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 3909,
                      "name": "_newPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5103,
                      "src": "7768:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint64_$returns$_t_struct$_Period_$3684_storage_ptr_$",
                        "typeString": "function (uint64) returns (struct Finance.Period storage pointer)"
                      }
                    },
                    "id": 3912,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7768:28:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                      "typeString": "struct Finance.Period storage pointer"
                    }
                  },
                  "id": 3913,
                  "nodeType": "ExpressionStatement",
                  "src": "7768:28:7"
                }
              ]
            },
            "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": 3915,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 3865,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3864,
                  "name": "onlyInit",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10742,
                  "src": "7124:8:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7124:8:7"
              }
            ],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3863,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3860,
                  "name": "_vault",
                  "nodeType": "VariableDeclaration",
                  "scope": 3915,
                  "src": "7077:12:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Vault_$7857",
                    "typeString": "contract Vault"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3859,
                    "name": "Vault",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7857,
                    "src": "7077:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Vault_$7857",
                      "typeString": "contract Vault"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3862,
                  "name": "_periodDuration",
                  "nodeType": "VariableDeclaration",
                  "scope": 3915,
                  "src": "7091:22:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3861,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "7091:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7076:38:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 3866,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7133:0:7"
            },
            "scope": 5528,
            "src": "7057:746:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3957,
              "nodeType": "Block",
              "src": "8181:402:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3931,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3929,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3919,
                          "src": "8199:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 3930,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8209:1:7",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "8199:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3932,
                        "name": "ERROR_DEPOSIT_AMOUNT_ZERO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3603,
                        "src": "8212:25:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 3928,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "8191:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3933,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8191:47:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3934,
                  "nodeType": "ExpressionStatement",
                  "src": "8191:47:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 3937,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3935,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3917,
                      "src": "8252:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 3936,
                      "name": "ETH",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10661,
                      "src": "8262:3:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8252:13:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3947,
                  "nodeType": "IfStatement",
                  "src": "8248:193:7",
                  "trueBody": {
                    "id": 3946,
                    "nodeType": "Block",
                    "src": "8267:174:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3942,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 3939,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 15153,
                                  "src": "8383:3:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 3940,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "value",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "8383:9:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 3941,
                                "name": "_amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3919,
                                "src": "8396:7:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "8383:20:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3943,
                              "name": "ERROR_ETH_VALUE_MISMATCH",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3606,
                              "src": "8405:24:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_string_memory",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 3938,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              15156,
                              15157
                            ],
                            "referencedDeclaration": 15157,
                            "src": "8375:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3944,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8375:55:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3945,
                        "nodeType": "ExpressionStatement",
                        "src": "8375:55:7"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3949,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3917,
                        "src": "8473:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3950,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3919,
                        "src": "8493:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3951,
                        "name": "_reference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3921,
                        "src": "8514:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3952,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15153,
                          "src": "8538:3:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3953,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "8538:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "74727565",
                        "id": 3954,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8562:4:7",
                        "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": 3948,
                      "name": "_deposit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4866,
                      "src": "8451:8:7",
                      "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": 3955,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8451:125:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3956,
                  "nodeType": "ExpressionStatement",
                  "src": "8451:125:7"
                }
              ]
            },
            "documentation": "@notice Deposit `@tokenAmount(_token, _amount)`\n@dev Deposit for approved ERC20 tokens or ETH\n@param _token Address of deposited token\n@param _amount Amount of tokens sent\n@param _reference Reason for payment",
            "id": 3958,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 3924,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3923,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10752,
                  "src": "8149:13:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8149:13:7"
              },
              {
                "arguments": null,
                "id": 3926,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3925,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3785,
                  "src": "8163:17:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8163:17:7"
              }
            ],
            "name": "deposit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3922,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3917,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 3958,
                  "src": "8080:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3916,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8080:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3919,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 3958,
                  "src": "8096:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3918,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8096:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3921,
                  "name": "_reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 3958,
                  "src": "8113:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3920,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "8113:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8079:52:7"
            },
            "payable": true,
            "returnParameters": {
              "id": 3927,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8181:0:7"
            },
            "scope": 5528,
            "src": "8063:520:7",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4001,
              "nodeType": "Block",
              "src": "9851:346:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3988,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3986,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3964,
                          "src": "9869:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 3987,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9879:1:7",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "9869:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3989,
                        "name": "ERROR_NEW_PAYMENT_AMOUNT_ZERO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3588,
                        "src": "9882:29:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 3985,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "9861:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3990,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9861:51:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3991,
                  "nodeType": "ExpressionStatement",
                  "src": "9861:51:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3993,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3960,
                        "src": "9960:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3994,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3962,
                        "src": "9980:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3995,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3964,
                        "src": "10003:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3996,
                        "name": "NO_SCHEDULED_PAYMENT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3544,
                        "src": "10024:20:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 3997,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10109:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "id": 3998,
                        "name": "_reference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3966,
                        "src": "10170:10:7",
                        "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": 3992,
                      "name": "_makePaymentTransaction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5010,
                      "src": "9923:23:7",
                      "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": 3999,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9923:267:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4000,
                  "nodeType": "ExpressionStatement",
                  "src": "9923:267:7"
                }
              ]
            },
            "documentation": "@notice Create a new payment of `@tokenAmount(_token, _amount)` to `_receiver` for '`_reference`'\n@dev Note that this function is protected by the `CREATE_PAYMENTS_ROLE` but uses `MAX_UINT256`\n     as its interval auth parameter (as a sentinel value for \"never repeating\").\n     While this protects against most cases (you typically want to set a baseline requirement\n     for interval time), it does mean users will have to explicitly check for this case when\n     granting a permission that includes a upperbound requirement on the interval time.\n@param _token Address of token for payment\n@param _receiver Address that will receive payment\n@param _amount Tokens that are paid every time the payment is due\n@param _reference String detailing payment reason",
            "id": 4002,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 3969,
                    "name": "CREATE_PAYMENTS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3521,
                    "src": "9724:20:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3971,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3960,
                        "src": "9751:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3972,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3962,
                        "src": "9759:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3973,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3964,
                        "src": "9770:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3974,
                        "name": "MAX_UINT256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3556,
                        "src": "9779:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 3976,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9800:1:7",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            }
                          ],
                          "id": 3975,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "9792:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 3977,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9792:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 3978,
                          "name": "getTimestamp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11188,
                          "src": "9804:12:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 3979,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9804:14:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3970,
                      "name": "_arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5519,
                      "src": "9746:4:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (address,address,uint256,uint256,uint256,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 3980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9746:73:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 3981,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3968,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10428,
                  "src": "9718:5:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9718:102:7"
              },
              {
                "arguments": null,
                "id": 3983,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3982,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3785,
                  "src": "9829:17:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9829:17:7"
              }
            ],
            "name": "newImmediatePayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3967,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3960,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 4002,
                  "src": "9452:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3959,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9452:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3962,
                  "name": "_receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 4002,
                  "src": "9468:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3961,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9468:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3964,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4002,
                  "src": "9487:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3963,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9487:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3966,
                  "name": "_reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 4002,
                  "src": "9504:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3965,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "9504:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9451:71:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 3984,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9851:0:7"
            },
            "scope": 5528,
            "src": "9423:774:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4155,
              "nodeType": "Block",
              "src": "11513:1334:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4043,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4041,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4008,
                          "src": "11531:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 4042,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11541:1:7",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "11531:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4044,
                        "name": "ERROR_NEW_PAYMENT_AMOUNT_ZERO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3588,
                        "src": "11544:29:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4040,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "11523:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4045,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11523:51:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4046,
                  "nodeType": "ExpressionStatement",
                  "src": "11523:51:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 4050,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4048,
                          "name": "_interval",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4012,
                          "src": "11592:9:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 4049,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11604:1:7",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "11592:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4051,
                        "name": "ERROR_NEW_PAYMENT_INTERVAL_ZERO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3591,
                        "src": "11607:31:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4047,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "11584:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4052,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11584:55:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4053,
                  "nodeType": "ExpressionStatement",
                  "src": "11584:55:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 4057,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4055,
                          "name": "_maxExecutions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4014,
                          "src": "11657:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 4056,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11674:1:7",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "11657:18:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4058,
                        "name": "ERROR_NEW_PAYMENT_EXECS_ZERO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3594,
                        "src": "11677:28:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4054,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "11649:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4059,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11649:57:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4060,
                  "nodeType": "ExpressionStatement",
                  "src": "11649:57:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 4073,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4066,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "11831:27:7",
                          "subExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4062,
                                "name": "settings",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3699,
                                "src": "11832:8:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Settings_$3695_storage",
                                  "typeString": "struct Finance.Settings storage ref"
                                }
                              },
                              "id": 4063,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "hasBudget",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3694,
                              "src": "11832:18:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 4065,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 4064,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4004,
                              "src": "11851:6:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "11832:26:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4072,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4067,
                                "name": "settings",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3699,
                                "src": "11862:8:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Settings_$3695_storage",
                                  "typeString": "struct Finance.Settings storage ref"
                                }
                              },
                              "id": 4068,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "budgets",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3690,
                              "src": "11862:16:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 4070,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 4069,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4004,
                              "src": "11879:6:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "11862:24:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 4071,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4008,
                            "src": "11890:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11862:35:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "11831:66:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4074,
                        "name": "ERROR_BUDGET",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3609,
                        "src": "11899:12:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4061,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "11823:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4075,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11823:89:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4076,
                  "nodeType": "ExpressionStatement",
                  "src": "11823:89:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 4079,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4077,
                      "name": "_maxExecutions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4014,
                      "src": "12044:14:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 4078,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "12062:1:7",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "12044:19:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4089,
                  "nodeType": "IfStatement",
                  "src": "12040:126:7",
                  "trueBody": {
                    "id": 4088,
                    "nodeType": "Block",
                    "src": "12065:101:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              },
                              "id": 4084,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 4081,
                                "name": "_initialPaymentTime",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4010,
                                "src": "12087:19:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 4082,
                                  "name": "getTimestamp64",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11199,
                                  "src": "12109:14:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                                    "typeString": "function () view returns (uint64)"
                                  }
                                },
                                "id": 4083,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "12109:16:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              },
                              "src": "12087:38:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4085,
                              "name": "ERROR_NEW_PAYMENT_IMMEDIATE",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3597,
                              "src": "12127:27:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_string_memory",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 4080,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              15156,
                              15157
                            ],
                            "referencedDeclaration": 15157,
                            "src": "12079:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4086,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12079:76:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4087,
                        "nodeType": "ExpressionStatement",
                        "src": "12079:76:7"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4093,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4090,
                      "name": "paymentId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4038,
                      "src": "12176:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4092,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "12188:19:7",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 4091,
                        "name": "paymentsNextIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3705,
                        "src": "12188:17:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12176:31:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4094,
                  "nodeType": "ExpressionStatement",
                  "src": "12176:31:7"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4096,
                        "name": "paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4038,
                        "src": "12233:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4097,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4006,
                        "src": "12244:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4098,
                        "name": "_maxExecutions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4014,
                        "src": "12255:14:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4099,
                        "name": "_reference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4016,
                        "src": "12271:10:7",
                        "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": 4095,
                      "name": "NewPayment",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3743,
                      "src": "12222:10:7",
                      "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": 4100,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12222:60:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4101,
                  "nodeType": "EmitStatement",
                  "src": "12217:65:7"
                },
                {
                  "assignments": [
                    4103
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4103,
                      "name": "payment",
                      "nodeType": "VariableDeclaration",
                      "scope": 4156,
                      "src": "12293:32:7",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                        "typeString": "struct Finance.ScheduledPayment"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 4102,
                        "name": "ScheduledPayment",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3649,
                        "src": "12293:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4107,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 4104,
                      "name": "scheduledPayments",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3703,
                      "src": "12328:17:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ScheduledPayment_$3649_storage_$",
                        "typeString": "mapping(uint256 => struct Finance.ScheduledPayment storage ref)"
                      }
                    },
                    "id": 4106,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 4105,
                      "name": "paymentId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4038,
                      "src": "12346:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "12328:28:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage",
                      "typeString": "struct Finance.ScheduledPayment storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12293:63:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4112,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4108,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4103,
                        "src": "12366:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 4110,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "token",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3632,
                      "src": "12366:13:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4111,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4004,
                      "src": "12382:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "12366:22:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4113,
                  "nodeType": "ExpressionStatement",
                  "src": "12366:22:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4118,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4114,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4103,
                        "src": "12398:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 4116,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "receiver",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3634,
                      "src": "12398:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4117,
                      "name": "_receiver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4006,
                      "src": "12417:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "12398:28:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4119,
                  "nodeType": "ExpressionStatement",
                  "src": "12398:28:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4124,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4120,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4103,
                        "src": "12436:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 4122,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3640,
                      "src": "12436:14:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4123,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4008,
                      "src": "12453:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12436:24:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4125,
                  "nodeType": "ExpressionStatement",
                  "src": "12436:24:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4130,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4126,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4103,
                        "src": "12470:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 4128,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "initialPaymentTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3642,
                      "src": "12470:26:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4129,
                      "name": "_initialPaymentTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4010,
                      "src": "12499:19:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "12470:48:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4131,
                  "nodeType": "ExpressionStatement",
                  "src": "12470:48:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4136,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4132,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4103,
                        "src": "12528:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 4134,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "interval",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3644,
                      "src": "12528:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4135,
                      "name": "_interval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4012,
                      "src": "12547:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "12528:28:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4137,
                  "nodeType": "ExpressionStatement",
                  "src": "12528:28:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4142,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4138,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4103,
                        "src": "12566:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 4140,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "maxExecutions",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3646,
                      "src": "12566:21:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4141,
                      "name": "_maxExecutions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4014,
                      "src": "12590:14:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "12566:38:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4143,
                  "nodeType": "ExpressionStatement",
                  "src": "12566:38:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4149,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4144,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4103,
                        "src": "12614:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 4146,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "createdBy",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3636,
                      "src": "12614:17:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4147,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15153,
                        "src": "12634:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 4148,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "12634:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "12614:30:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4150,
                  "nodeType": "ExpressionStatement",
                  "src": "12614:30:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4152,
                        "name": "paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4038,
                        "src": "12830:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4151,
                      "name": "_executePayment",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4942,
                      "src": "12814:15:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) returns (uint256)"
                      }
                    },
                    "id": 4153,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12814:26:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4154,
                  "nodeType": "ExpressionStatement",
                  "src": "12814:26:7"
                }
              ]
            },
            "documentation": "@notice Create a new payment of `@tokenAmount(_token, _amount)` to `_receiver` for `_reference`, executing `_maxExecutions` times at intervals of `@transformTime(_interval)`\n@dev See `newImmediatePayment()` for limitations on how the interval auth parameter can be used\n@param _token Address of token for payment\n@param _receiver Address that will receive payment\n@param _amount Tokens that are paid 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 _maxExecutions Maximum instances a payment can be executed\n@param _reference String detailing payment reason",
            "id": 4156,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4019,
                    "name": "CREATE_PAYMENTS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3521,
                    "src": "11316:20:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4021,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4004,
                        "src": "11343:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4022,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4006,
                        "src": "11351:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4023,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4008,
                        "src": "11362:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4025,
                            "name": "_interval",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4012,
                            "src": "11379:9:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          ],
                          "id": 4024,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "11371:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 4026,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11371:18:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4028,
                            "name": "_maxExecutions",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4014,
                            "src": "11399:14:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          ],
                          "id": 4027,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "11391:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 4029,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11391:23:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4031,
                            "name": "_initialPaymentTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4010,
                            "src": "11424:19:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          ],
                          "id": 4030,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "11416:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 4032,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11416:28:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4020,
                      "name": "_arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5519,
                      "src": "11338:4:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (address,address,uint256,uint256,uint256,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 4033,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11338:107:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 4034,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4018,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10428,
                  "src": "11310:5:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11310:136:7"
              },
              {
                "arguments": null,
                "id": 4036,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4035,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3785,
                  "src": "11455:17:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11455:17:7"
              }
            ],
            "name": "newScheduledPayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4017,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4004,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 4156,
                  "src": "11010:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4003,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11010:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4006,
                  "name": "_receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 4156,
                  "src": "11034:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4005,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11034:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4008,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4156,
                  "src": "11061:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4007,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11061:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4010,
                  "name": "_initialPaymentTime",
                  "nodeType": "VariableDeclaration",
                  "scope": 4156,
                  "src": "11086:26:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4009,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "11086:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4012,
                  "name": "_interval",
                  "nodeType": "VariableDeclaration",
                  "scope": 4156,
                  "src": "11122:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4011,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "11122:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4014,
                  "name": "_maxExecutions",
                  "nodeType": "VariableDeclaration",
                  "scope": 4156,
                  "src": "11148:21:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4013,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "11148:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4016,
                  "name": "_reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 4156,
                  "src": "11179:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 4015,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "11179:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11000:202:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4039,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4038,
                  "name": "paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4156,
                  "src": "11490:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4037,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11490:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11489:19:7"
            },
            "scope": 5528,
            "src": "10972:1875:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4192,
              "nodeType": "Block",
              "src": "13249:190:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 4178,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4176,
                          "name": "_periodDuration",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4158,
                          "src": "13267:15:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 4177,
                          "name": "MINIMUM_PERIOD",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3567,
                          "src": "13286:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "13267:33:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4179,
                        "name": "ERROR_SET_PERIOD_TOO_SHORT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3585,
                        "src": "13302:26:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4175,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "13259:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4180,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13259:70:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4181,
                  "nodeType": "ExpressionStatement",
                  "src": "13259:70:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4186,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4182,
                        "name": "settings",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3699,
                        "src": "13339:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Settings_$3695_storage",
                          "typeString": "struct Finance.Settings storage ref"
                        }
                      },
                      "id": 4184,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "periodDuration",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3686,
                      "src": "13339:23:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4185,
                      "name": "_periodDuration",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4158,
                      "src": "13365:15:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "13339:41:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4187,
                  "nodeType": "ExpressionStatement",
                  "src": "13339:41:7"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4189,
                        "name": "_periodDuration",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4158,
                        "src": "13416:15:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 4188,
                      "name": "ChangePeriodDuration",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3765,
                      "src": "13395:20:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint64_$returns$__$",
                        "typeString": "function (uint64)"
                      }
                    },
                    "id": 4190,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13395:37:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4191,
                  "nodeType": "EmitStatement",
                  "src": "13390:42:7"
                }
              ]
            },
            "documentation": "@notice Change period duration to `@transformTime(_periodDuration)`, effective for next accounting period\n@param _periodDuration Duration in seconds for accounting periods",
            "id": 4193,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4161,
                    "name": "CHANGE_PERIOD_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3526,
                    "src": "13134:18:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4164,
                            "name": "_periodDuration",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4158,
                            "src": "13166:15:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          ],
                          "id": 4163,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "13158:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 4165,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13158:24:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4167,
                              "name": "settings",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3699,
                              "src": "13192:8:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Settings_$3695_storage",
                                "typeString": "struct Finance.Settings storage ref"
                              }
                            },
                            "id": 4168,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "periodDuration",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3686,
                            "src": "13192:23:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          ],
                          "id": 4166,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "13184:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 4169,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13184:32:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4162,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9167,
                        9182,
                        9202,
                        9217,
                        9237,
                        9258,
                        9282,
                        9302,
                        9331,
                        9356,
                        9381,
                        9404,
                        9435,
                        9474,
                        9521,
                        9576
                      ],
                      "referencedDeclaration": 9435,
                      "src": "13154:3:7",
                      "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": 4170,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13154:63:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 4171,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4160,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10428,
                  "src": "13128:5:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13128:90:7"
              },
              {
                "arguments": null,
                "id": 4173,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4172,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3785,
                  "src": "13227:17:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13227:17:7"
              }
            ],
            "name": "setPeriodDuration",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4159,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4158,
                  "name": "_periodDuration",
                  "nodeType": "VariableDeclaration",
                  "scope": 4193,
                  "src": "13079:22:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4157,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "13079:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13078:24:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4174,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13249:0:7"
            },
            "scope": 5528,
            "src": "13052:387:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4251,
              "nodeType": "Block",
              "src": "13906:198:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4228,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4222,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3699,
                          "src": "13916:8:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$3695_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 4225,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "budgets",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3690,
                        "src": "13916:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 4226,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 4224,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4195,
                        "src": "13933:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "13916:24:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4227,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4197,
                      "src": "13943:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13916:34:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4229,
                  "nodeType": "ExpressionStatement",
                  "src": "13916:34:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 4234,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "13964:27:7",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4230,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3699,
                          "src": "13965:8:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$3695_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 4231,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hasBudget",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3694,
                        "src": "13965:18:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 4233,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 4232,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4195,
                        "src": "13984:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "13965:26:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4244,
                  "nodeType": "IfStatement",
                  "src": "13960:91:7",
                  "trueBody": {
                    "id": 4243,
                    "nodeType": "Block",
                    "src": "13993:58:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4241,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4235,
                                "name": "settings",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3699,
                                "src": "14007:8:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Settings_$3695_storage",
                                  "typeString": "struct Finance.Settings storage ref"
                                }
                              },
                              "id": 4238,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "hasBudget",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3694,
                              "src": "14007:18:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 4239,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 4237,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4195,
                              "src": "14026:6:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "14007:26:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "74727565",
                            "id": 4240,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "14036:4:7",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "14007:33:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4242,
                        "nodeType": "ExpressionStatement",
                        "src": "14007:33:7"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4246,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4195,
                        "src": "14075:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4247,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4197,
                        "src": "14083:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "74727565",
                        "id": 4248,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14092:4:7",
                        "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": 4245,
                      "name": "SetBudget",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3733,
                      "src": "14065:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (address,uint256,bool)"
                      }
                    },
                    "id": 4249,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14065:32:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4250,
                  "nodeType": "EmitStatement",
                  "src": "14060:37:7"
                }
              ]
            },
            "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": 4252,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4200,
                    "name": "CHANGE_BUDGETS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3531,
                    "src": "13762:19:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4202,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4195,
                        "src": "13787:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4203,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4197,
                        "src": "13795:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4204,
                            "name": "settings",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3699,
                            "src": "13804:8:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Settings_$3695_storage",
                              "typeString": "struct Finance.Settings storage ref"
                            }
                          },
                          "id": 4205,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "budgets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3690,
                          "src": "13804:16:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                          }
                        },
                        "id": 4207,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 4206,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4195,
                          "src": "13821:6:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "13804:24:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "condition": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4209,
                                  "name": "settings",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3699,
                                  "src": "13838:8:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Settings_$3695_storage",
                                    "typeString": "struct Finance.Settings storage ref"
                                  }
                                },
                                "id": 4210,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "hasBudget",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3694,
                                "src": "13838:18:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                  "typeString": "mapping(address => bool)"
                                }
                              },
                              "id": 4212,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 4211,
                                "name": "_token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4195,
                                "src": "13857:6:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "13838:26:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 4214,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13871:1:7",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "id": 4215,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "Conditional",
                            "src": "13838:34:7",
                            "trueExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 4213,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13867:1:7",
                              "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": 4208,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "13830:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 4216,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13830:43:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4201,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9167,
                        9182,
                        9202,
                        9217,
                        9237,
                        9258,
                        9282,
                        9302,
                        9331,
                        9356,
                        9381,
                        9404,
                        9435,
                        9474,
                        9521,
                        9576
                      ],
                      "referencedDeclaration": 9282,
                      "src": "13783:3:7",
                      "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": 4217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13783:91:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 4218,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4199,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10428,
                  "src": "13756:5:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13756:119:7"
              },
              {
                "arguments": null,
                "id": 4220,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4219,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3785,
                  "src": "13884:17:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13884:17:7"
              }
            ],
            "name": "setBudget",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4198,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4195,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 4252,
                  "src": "13685:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4194,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13685:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4197,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4252,
                  "src": "13709:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4196,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13709:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13675:55:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4221,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13906:0:7"
            },
            "scope": 5528,
            "src": "13657:447:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4303,
              "nodeType": "Block",
              "src": "14468:131:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4287,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4281,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3699,
                          "src": "14478:8:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$3695_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 4284,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "budgets",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3690,
                        "src": "14478:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 4285,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 4283,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4254,
                        "src": "14495:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "14478:24:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 4286,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14505:1:7",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "14478:28:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4288,
                  "nodeType": "ExpressionStatement",
                  "src": "14478:28:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4295,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4289,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3699,
                          "src": "14516:8:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$3695_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 4292,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hasBudget",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3694,
                        "src": "14516:18:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 4293,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 4291,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4254,
                        "src": "14535:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "14516:26:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 4294,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14545:5:7",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "14516:34:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4296,
                  "nodeType": "ExpressionStatement",
                  "src": "14516:34:7"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4298,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4254,
                        "src": "14575:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 4299,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14583:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 4300,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14586:5:7",
                        "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": 4297,
                      "name": "SetBudget",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3733,
                      "src": "14565:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (address,uint256,bool)"
                      }
                    },
                    "id": 4301,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14565:27:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4302,
                  "nodeType": "EmitStatement",
                  "src": "14560:32:7"
                }
              ]
            },
            "documentation": "@notice Remove spending limit for `_token.symbol(): string`, effective immediately\n@param _token Address for token",
            "id": 4304,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4257,
                    "name": "CHANGE_BUDGETS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3531,
                    "src": "14321:19:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4259,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4254,
                        "src": "14346:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 4261,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "14362:1:7",
                            "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": 4260,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14354:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 4262,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14354:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4263,
                            "name": "settings",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3699,
                            "src": "14366:8:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Settings_$3695_storage",
                              "typeString": "struct Finance.Settings storage ref"
                            }
                          },
                          "id": 4264,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "budgets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3690,
                          "src": "14366:16:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                          }
                        },
                        "id": 4266,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 4265,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4254,
                          "src": "14383:6:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "14366:24:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "condition": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4268,
                                  "name": "settings",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3699,
                                  "src": "14400:8:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Settings_$3695_storage",
                                    "typeString": "struct Finance.Settings storage ref"
                                  }
                                },
                                "id": 4269,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "hasBudget",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3694,
                                "src": "14400:18:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                  "typeString": "mapping(address => bool)"
                                }
                              },
                              "id": 4271,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 4270,
                                "name": "_token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4254,
                                "src": "14419:6:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "14400:26:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 4273,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14433:1:7",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "id": 4274,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "Conditional",
                            "src": "14400:34:7",
                            "trueExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 4272,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14429:1:7",
                              "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": 4267,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14392:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 4275,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14392:43:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4258,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9167,
                        9182,
                        9202,
                        9217,
                        9237,
                        9258,
                        9282,
                        9302,
                        9331,
                        9356,
                        9381,
                        9404,
                        9435,
                        9474,
                        9521,
                        9576
                      ],
                      "referencedDeclaration": 9282,
                      "src": "14342:3:7",
                      "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": 4276,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14342:94:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 4277,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4256,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10428,
                  "src": "14315:5:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14315:122:7"
              },
              {
                "arguments": null,
                "id": 4279,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4278,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3785,
                  "src": "14446:17:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14446:17:7"
              }
            ],
            "name": "removeBudget",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4255,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4254,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 4304,
                  "src": "14274:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4253,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14274:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14273:16:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4280,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14468:0:7"
            },
            "scope": 5528,
            "src": "14252:347:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4328,
              "nodeType": "Block",
              "src": "14993:55:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4325,
                        "name": "_paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4306,
                        "src": "15030:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4324,
                      "name": "_executePaymentAtLeastOnce",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4976,
                      "src": "15003:26:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 4326,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15003:38:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4327,
                  "nodeType": "ExpressionStatement",
                  "src": "15003:38:7"
                }
              ]
            },
            "documentation": "@notice Execute pending payment #`_paymentId`\n@dev Executes any payment (requires role)\n@param _paymentId Identifier for payment",
            "id": 4329,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4309,
                    "name": "EXECUTE_PAYMENTS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3536,
                    "src": "14842:21:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4311,
                        "name": "_paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4306,
                        "src": "14869:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 4312,
                            "name": "scheduledPayments",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3703,
                            "src": "14881:17:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ScheduledPayment_$3649_storage_$",
                              "typeString": "mapping(uint256 => struct Finance.ScheduledPayment storage ref)"
                            }
                          },
                          "id": 4314,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 4313,
                            "name": "_paymentId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4306,
                            "src": "14899:10:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "14881:29:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage",
                            "typeString": "struct Finance.ScheduledPayment storage ref"
                          }
                        },
                        "id": 4315,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "amount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3640,
                        "src": "14881:36:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4310,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9167,
                        9182,
                        9202,
                        9217,
                        9237,
                        9258,
                        9282,
                        9302,
                        9331,
                        9356,
                        9381,
                        9404,
                        9435,
                        9474,
                        9521,
                        9576
                      ],
                      "referencedDeclaration": 9435,
                      "src": "14865:3:7",
                      "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": 4316,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14865:53:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 4317,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4308,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10428,
                  "src": "14836:5:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14836:83:7"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4319,
                    "name": "_paymentId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4306,
                    "src": "14951:10:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 4320,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4318,
                  "name": "scheduledPaymentExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3802,
                  "src": "14928:22:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14928:34:7"
              },
              {
                "arguments": null,
                "id": 4322,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4321,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3785,
                  "src": "14971:17:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14971:17:7"
              }
            ],
            "name": "executePayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4307,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4306,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4329,
                  "src": "14791:18:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4305,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14791:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14790:20:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4323,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14993:0:7"
            },
            "scope": 5528,
            "src": "14767:281:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4354,
              "nodeType": "Block",
              "src": "15550:150:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 4346,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 4340,
                              "name": "scheduledPayments",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3703,
                              "src": "15568:17:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ScheduledPayment_$3649_storage_$",
                                "typeString": "mapping(uint256 => struct Finance.ScheduledPayment storage ref)"
                              }
                            },
                            "id": 4342,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 4341,
                              "name": "_paymentId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4331,
                              "src": "15586:10:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "15568:29:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage",
                              "typeString": "struct Finance.ScheduledPayment storage ref"
                            }
                          },
                          "id": 4343,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "receiver",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3634,
                          "src": "15568:38:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4344,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15153,
                            "src": "15610:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 4345,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "15610:10:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "15568:52:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4347,
                        "name": "ERROR_PAYMENT_RECEIVER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3618,
                        "src": "15622:22:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4339,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "15560:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4348,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15560:85:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4349,
                  "nodeType": "ExpressionStatement",
                  "src": "15560:85:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4351,
                        "name": "_paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4331,
                        "src": "15682:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4350,
                      "name": "_executePaymentAtLeastOnce",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4976,
                      "src": "15655:26:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 4352,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15655:38:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4353,
                  "nodeType": "ExpressionStatement",
                  "src": "15655:38:7"
                }
              ]
            },
            "documentation": "@notice Execute pending payment #`_paymentId`\n@dev Always allow receiver of a payment to trigger execution\n     Initialization check is implicitly provided by `scheduledPaymentExists()` as new\n     scheduled payments can only be created via `newScheduledPayment(),` which requires initialization\n@param _paymentId Identifier for payment",
            "id": 4355,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4334,
                    "name": "_paymentId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4331,
                    "src": "15520:10:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 4335,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4333,
                  "name": "scheduledPaymentExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3802,
                  "src": "15497:22:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15497:34:7"
              },
              {
                "arguments": null,
                "id": 4337,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4336,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3785,
                  "src": "15532:17:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15532:17:7"
              }
            ],
            "name": "receiverExecutePayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4332,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4331,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4355,
                  "src": "15468:18:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4330,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15468:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15467:20:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4338,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15550:0:7"
            },
            "scope": 5528,
            "src": "15436:264:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4390,
              "nodeType": "Block",
              "src": "16397:120:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4383,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 4377,
                          "name": "scheduledPayments",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3703,
                          "src": "16407:17:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ScheduledPayment_$3649_storage_$",
                            "typeString": "mapping(uint256 => struct Finance.ScheduledPayment storage ref)"
                          }
                        },
                        "id": 4379,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 4378,
                          "name": "_paymentId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4357,
                          "src": "16425:10:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "16407:29:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage",
                          "typeString": "struct Finance.ScheduledPayment storage ref"
                        }
                      },
                      "id": 4380,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "inactive",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3638,
                      "src": "16407:38:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4382,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "16448:8:7",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 4381,
                        "name": "_active",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4359,
                        "src": "16449:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "16407:49:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4384,
                  "nodeType": "ExpressionStatement",
                  "src": "16407:49:7"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4386,
                        "name": "_paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4357,
                        "src": "16490:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4387,
                        "name": "_active",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4359,
                        "src": "16502:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4385,
                      "name": "ChangePaymentState",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3761,
                      "src": "16471:18:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (uint256,bool)"
                      }
                    },
                    "id": 4388,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16471:39:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4389,
                  "nodeType": "EmitStatement",
                  "src": "16466:44:7"
                }
              ]
            },
            "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": 4391,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4362,
                    "name": "MANAGE_PAYMENTS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3541,
                    "src": "16285:20:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4364,
                        "name": "_paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4357,
                        "src": "16311:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "condition": {
                              "argumentTypes": null,
                              "id": 4366,
                              "name": "_active",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4359,
                              "src": "16331:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 4368,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "16345:1:7",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "id": 4369,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "Conditional",
                            "src": "16331:15:7",
                            "trueExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 4367,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "16341:1:7",
                              "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": 4365,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "16323:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 4370,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16323:24:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4363,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9167,
                        9182,
                        9202,
                        9217,
                        9237,
                        9258,
                        9282,
                        9302,
                        9331,
                        9356,
                        9381,
                        9404,
                        9435,
                        9474,
                        9521,
                        9576
                      ],
                      "referencedDeclaration": 9435,
                      "src": "16307:3:7",
                      "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": 4371,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16307:41:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 4372,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4361,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10428,
                  "src": "16279:5:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16279:70:7"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4374,
                    "name": "_paymentId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4357,
                    "src": "16381:10:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 4375,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4373,
                  "name": "scheduledPaymentExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3802,
                  "src": "16358:22:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16358:34:7"
              }
            ],
            "name": "setPaymentStatus",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4360,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4357,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4391,
                  "src": "16220:18:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4356,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16220:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4359,
                  "name": "_active",
                  "nodeType": "VariableDeclaration",
                  "scope": 4391,
                  "src": "16240:12:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4358,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "16240:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16219:34:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4376,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16397:0:7"
            },
            "scope": 5528,
            "src": "16194:323:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4436,
              "nodeType": "Block",
              "src": "17011:321:7",
              "statements": [
                {
                  "assignments": [
                    4401
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4401,
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 4437,
                      "src": "17021:14:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4400,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17021:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4418,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 4404,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 4402,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4393,
                        "src": "17038:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 4403,
                        "name": "ETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10661,
                        "src": "17048:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "17038:13:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4414,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15232,
                              "src": "17116:4:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Finance_$5528",
                                "typeString": "contract Finance"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_Finance_$5528",
                                "typeString": "contract Finance"
                              }
                            ],
                            "id": 4413,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "17108:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 4415,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17108:13:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4410,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4393,
                              "src": "17084:6:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 4409,
                            "name": "ERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14294,
                            "src": "17078:5:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_ERC20_$14294_$",
                              "typeString": "type(contract ERC20)"
                            }
                          },
                          "id": 4411,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17078:13:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$14294",
                            "typeString": "contract ERC20"
                          }
                        },
                        "id": 4412,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "staticBalanceOf",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 11080,
                        "src": "17078:29:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_contract$_ERC20_$14294_$_t_address_$returns$_t_uint256_$bound_to$_t_contract$_ERC20_$14294_$",
                          "typeString": "function (contract ERC20,address) view returns (uint256)"
                        }
                      },
                      "id": 4416,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "17078:44:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 4417,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "17038:84:7",
                    "trueExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4406,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15232,
                            "src": "17062:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Finance_$5528",
                              "typeString": "contract Finance"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Finance_$5528",
                              "typeString": "contract Finance"
                            }
                          ],
                          "id": 4405,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "17054:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 4407,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17054:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 4408,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17054:21:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17021:101:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4422,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4420,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4401,
                          "src": "17140:6:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 4421,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "17149:1:7",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "17140:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4423,
                        "name": "ERROR_RECOVER_AMOUNT_ZERO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3600,
                        "src": "17152:25:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4419,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "17132:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4424,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17132:46:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4425,
                  "nodeType": "ExpressionStatement",
                  "src": "17132:46:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4427,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4393,
                        "src": "17211:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4428,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4401,
                        "src": "17231:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5265636f76657220746f205661756c74",
                        "id": 4429,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17251:18:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_44b346127d1482933635aa4b55865bc72d4d3e4d60d301bd26394661695fe15d",
                          "typeString": "literal_string \"Recover to Vault\""
                        },
                        "value": "Recover to Vault"
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4431,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15232,
                            "src": "17291:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Finance_$5528",
                              "typeString": "contract Finance"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Finance_$5528",
                              "typeString": "contract Finance"
                            }
                          ],
                          "id": 4430,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "17283:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 4432,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17283:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 4433,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17310:5:7",
                        "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_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4426,
                      "name": "_deposit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4866,
                      "src": "17189:8:7",
                      "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": 4434,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17189:136:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4435,
                  "nodeType": "ExpressionStatement",
                  "src": "17189:136:7"
                }
              ]
            },
            "documentation": "@notice Send tokens held in this contract to the Vault\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@param _token Token whose balance is going to be transferred.",
            "id": 4437,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 4396,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4395,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10752,
                  "src": "16979:13:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16979:13:7"
              },
              {
                "arguments": null,
                "id": 4398,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4397,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3785,
                  "src": "16993:17:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16993:17:7"
              }
            ],
            "name": "recoverToVault",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4394,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4393,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 4437,
                  "src": "16954:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4392,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16954:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16953:16:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4399,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17011:0:7"
            },
            "scope": 5528,
            "src": "16930:402:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4450,
              "nodeType": "Block",
              "src": "17995:71:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4447,
                        "name": "_maxTransitions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4439,
                        "src": "18043:15:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 4446,
                      "name": "_tryTransitionAccountingPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5331,
                      "src": "18012:30:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint64_$returns$_t_bool_$",
                        "typeString": "function (uint64) returns (bool)"
                      }
                    },
                    "id": 4448,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18012:47:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4445,
                  "id": 4449,
                  "nodeType": "Return",
                  "src": "18005:54:7"
                }
              ]
            },
            "documentation": "@notice Transition accounting period if needed\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@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": 4451,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 4442,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4441,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10752,
                  "src": "17958:13:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17958:13:7"
              }
            ],
            "name": "tryTransitionAccountingPeriod",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4440,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4439,
                  "name": "_maxTransitions",
                  "nodeType": "VariableDeclaration",
                  "scope": 4451,
                  "src": "17925:22:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4438,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "17925:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17924:24:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4445,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4444,
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 4451,
                  "src": "17981:12:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4443,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "17981:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17980:14:7"
            },
            "scope": 5528,
            "src": "17886:180:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4462,
              "nodeType": "Block",
              "src": "18433:41:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4460,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "18450:17:7",
                    "subExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 4458,
                        "name": "hasInitialized",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10782,
                        "src": "18451:14:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                          "typeString": "function () view returns (bool)"
                        }
                      },
                      "id": 4459,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "18451:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4457,
                  "id": 4461,
                  "nodeType": "Return",
                  "src": "18443:24:7"
                }
              ]
            },
            "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": 4463,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "allowRecoverability",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4454,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4453,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4463,
                  "src": "18397:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4452,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18397:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18396:9:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4457,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4456,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4463,
                  "src": "18427:4:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4455,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "18427:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18426:6:7"
            },
            "scope": 5528,
            "src": "18368:106:7",
            "stateMutability": "view",
            "superFunction": 11416,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4540,
              "nodeType": "Block",
              "src": "18898:441:7",
              "statements": [
                {
                  "assignments": [
                    4490
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4490,
                      "name": "payment",
                      "nodeType": "VariableDeclaration",
                      "scope": 4541,
                      "src": "18908:32:7",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                        "typeString": "struct Finance.ScheduledPayment"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 4489,
                        "name": "ScheduledPayment",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3649,
                        "src": "18908:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4494,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 4491,
                      "name": "scheduledPayments",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3703,
                      "src": "18943:17:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ScheduledPayment_$3649_storage_$",
                        "typeString": "mapping(uint256 => struct Finance.ScheduledPayment storage ref)"
                      }
                    },
                    "id": 4493,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 4492,
                      "name": "_paymentId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4465,
                      "src": "18961:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "18943:29:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage",
                      "typeString": "struct Finance.ScheduledPayment storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18908:64:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4498,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4495,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4471,
                      "src": "18983:5:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4496,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4490,
                        "src": "18991:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 4497,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "token",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3632,
                      "src": "18991:13:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "18983:21:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4499,
                  "nodeType": "ExpressionStatement",
                  "src": "18983:21:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4503,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4500,
                      "name": "receiver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4473,
                      "src": "19014:8:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4501,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4490,
                        "src": "19025:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 4502,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "receiver",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3634,
                      "src": "19025:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "19014:27:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4504,
                  "nodeType": "ExpressionStatement",
                  "src": "19014:27:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4508,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4505,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4475,
                      "src": "19051:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4506,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4490,
                        "src": "19060:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 4507,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3640,
                      "src": "19060:14:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "19051:23:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4509,
                  "nodeType": "ExpressionStatement",
                  "src": "19051:23:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4513,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4510,
                      "name": "initialPaymentTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4477,
                      "src": "19084:18:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4511,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4490,
                        "src": "19105:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 4512,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialPaymentTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3642,
                      "src": "19105:26:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "19084:47:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4514,
                  "nodeType": "ExpressionStatement",
                  "src": "19084:47:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4518,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4515,
                      "name": "interval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4479,
                      "src": "19141:8:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4516,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4490,
                        "src": "19152:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 4517,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "interval",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3644,
                      "src": "19152:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "19141:27:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4519,
                  "nodeType": "ExpressionStatement",
                  "src": "19141:27:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4523,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4520,
                      "name": "maxExecutions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4481,
                      "src": "19178:13:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4521,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4490,
                        "src": "19194:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 4522,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "maxExecutions",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3646,
                      "src": "19194:21:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "19178:37:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4524,
                  "nodeType": "ExpressionStatement",
                  "src": "19178:37:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4528,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4525,
                      "name": "executions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4485,
                      "src": "19225:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4526,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4490,
                        "src": "19238:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 4527,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "executions",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3648,
                      "src": "19238:18:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "19225:31:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4529,
                  "nodeType": "ExpressionStatement",
                  "src": "19225:31:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4533,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4530,
                      "name": "inactive",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4483,
                      "src": "19266:8:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4531,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4490,
                        "src": "19277:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 4532,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "inactive",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3638,
                      "src": "19277:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "19266:27:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4534,
                  "nodeType": "ExpressionStatement",
                  "src": "19266:27:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4538,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4535,
                      "name": "createdBy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4487,
                      "src": "19303:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4536,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4490,
                        "src": "19315:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 4537,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "createdBy",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3636,
                      "src": "19315:17:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "19303:29:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4539,
                  "nodeType": "ExpressionStatement",
                  "src": "19303:29:7"
                }
              ]
            },
            "documentation": null,
            "id": 4541,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4468,
                    "name": "_paymentId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4465,
                    "src": "18579:10:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 4469,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4467,
                  "name": "scheduledPaymentExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3802,
                  "src": "18556:22:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18556:34:7"
              }
            ],
            "name": "getPayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4466,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4465,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4541,
                  "src": "18500:18:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4464,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18500:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18499:20:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4488,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4471,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 4541,
                  "src": "18621:13:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4470,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18621:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4473,
                  "name": "receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 4541,
                  "src": "18648:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4472,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18648:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4475,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4541,
                  "src": "18678:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4474,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18678:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4477,
                  "name": "initialPaymentTime",
                  "nodeType": "VariableDeclaration",
                  "scope": 4541,
                  "src": "18706:25:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4476,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "18706:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4479,
                  "name": "interval",
                  "nodeType": "VariableDeclaration",
                  "scope": 4541,
                  "src": "18745:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4478,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "18745:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4481,
                  "name": "maxExecutions",
                  "nodeType": "VariableDeclaration",
                  "scope": 4541,
                  "src": "18774:20:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4480,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "18774:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4483,
                  "name": "inactive",
                  "nodeType": "VariableDeclaration",
                  "scope": 4541,
                  "src": "18808:13:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4482,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "18808:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4485,
                  "name": "executions",
                  "nodeType": "VariableDeclaration",
                  "scope": 4541,
                  "src": "18835:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4484,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "18835:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4487,
                  "name": "createdBy",
                  "nodeType": "VariableDeclaration",
                  "scope": 4541,
                  "src": "18866:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4486,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18866:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18607:286:7"
            },
            "scope": 5528,
            "src": "18480:859:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4611,
              "nodeType": "Block",
              "src": "19734:420:7",
              "statements": [
                {
                  "assignments": [
                    4566
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4566,
                      "name": "transaction",
                      "nodeType": "VariableDeclaration",
                      "scope": 4612,
                      "src": "19744:31:7",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                        "typeString": "struct Finance.Transaction"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 4565,
                        "name": "Transaction",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3666,
                        "src": "19744:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4570,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 4567,
                      "name": "transactions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3709,
                      "src": "19778:12:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Transaction_$3666_storage_$",
                        "typeString": "mapping(uint256 => struct Finance.Transaction storage ref)"
                      }
                    },
                    "id": 4569,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 4568,
                      "name": "_transactionId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4543,
                      "src": "19791:14:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "19778:28:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Transaction_$3666_storage",
                      "typeString": "struct Finance.Transaction storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19744:62:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4574,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4571,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4557,
                      "src": "19817:5:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4572,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4566,
                        "src": "19825:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 4573,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "token",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3651,
                      "src": "19825:17:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "19817:25:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4575,
                  "nodeType": "ExpressionStatement",
                  "src": "19817:25:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4579,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4576,
                      "name": "entity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4559,
                      "src": "19852:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4577,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4566,
                        "src": "19861:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 4578,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "entity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3653,
                      "src": "19861:18:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "19852:27:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4580,
                  "nodeType": "ExpressionStatement",
                  "src": "19852:27:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4584,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4581,
                      "name": "isIncoming",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4561,
                      "src": "19889:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4582,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4566,
                        "src": "19902:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 4583,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "isIncoming",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3655,
                      "src": "19902:22:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "19889:35:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4585,
                  "nodeType": "ExpressionStatement",
                  "src": "19889:35:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4589,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4586,
                      "name": "date",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4563,
                      "src": "19934:4:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4587,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4566,
                        "src": "19941:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 4588,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "date",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3663,
                      "src": "19941:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "19934:23:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4590,
                  "nodeType": "ExpressionStatement",
                  "src": "19934:23:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4594,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4591,
                      "name": "periodId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4549,
                      "src": "19967:8:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4592,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4566,
                        "src": "19978:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 4593,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "periodId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3665,
                      "src": "19978:20:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "19967:31:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4595,
                  "nodeType": "ExpressionStatement",
                  "src": "19967:31:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4599,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4596,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4551,
                      "src": "20008:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4597,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4566,
                        "src": "20017:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 4598,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3657,
                      "src": "20017:18:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20008:27:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4600,
                  "nodeType": "ExpressionStatement",
                  "src": "20008:27:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4604,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4601,
                      "name": "paymentId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4553,
                      "src": "20045:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4602,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4566,
                        "src": "20057:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 4603,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "paymentId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3659,
                      "src": "20057:21:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20045:33:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4605,
                  "nodeType": "ExpressionStatement",
                  "src": "20045:33:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4609,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4606,
                      "name": "paymentExecutionNumber",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4555,
                      "src": "20088:22:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4607,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4566,
                        "src": "20113:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 4608,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "paymentExecutionNumber",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3661,
                      "src": "20113:34:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "20088:59:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4610,
                  "nodeType": "ExpressionStatement",
                  "src": "20088:59:7"
                }
              ]
            },
            "documentation": null,
            "id": 4612,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4546,
                    "name": "_transactionId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4543,
                    "src": "19447:14:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 4547,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4545,
                  "name": "transactionExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3819,
                  "src": "19429:17:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "19429:33:7"
              }
            ],
            "name": "getTransaction",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4544,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4543,
                  "name": "_transactionId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4612,
                  "src": "19369:22:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4542,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19369:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19368:24:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4564,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4549,
                  "name": "periodId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4612,
                  "src": "19493:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4548,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "19493:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4551,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4612,
                  "src": "19522:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4550,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19522:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4553,
                  "name": "paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4612,
                  "src": "19550:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4552,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19550:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4555,
                  "name": "paymentExecutionNumber",
                  "nodeType": "VariableDeclaration",
                  "scope": 4612,
                  "src": "19581:29:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4554,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "19581:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4557,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 4612,
                  "src": "19624:13:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4556,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19624:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4559,
                  "name": "entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 4612,
                  "src": "19651:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4558,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19651:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4561,
                  "name": "isIncoming",
                  "nodeType": "VariableDeclaration",
                  "scope": 4612,
                  "src": "19679:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4560,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "19679:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4563,
                  "name": "date",
                  "nodeType": "VariableDeclaration",
                  "scope": 4612,
                  "src": "19708:11:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4562,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "19708:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19479:250:7"
            },
            "scope": 5528,
            "src": "19345:809:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4663,
              "nodeType": "Block",
              "src": "20453:296:7",
              "statements": [
                {
                  "assignments": [
                    4631
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4631,
                      "name": "period",
                      "nodeType": "VariableDeclaration",
                      "scope": 4664,
                      "src": "20463:21:7",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                        "typeString": "struct Finance.Period"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 4630,
                        "name": "Period",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3684,
                        "src": "20463:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                          "typeString": "struct Finance.Period"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4635,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 4632,
                      "name": "periods",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3715,
                      "src": "20487:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$3684_storage_$",
                        "typeString": "mapping(uint64 => struct Finance.Period storage ref)"
                      }
                    },
                    "id": 4634,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 4633,
                      "name": "_periodId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4614,
                      "src": "20495:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "20487:18:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Period_$3684_storage",
                      "typeString": "struct Finance.Period storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20463:42:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4641,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4636,
                      "name": "isCurrent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4620,
                      "src": "20516:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "id": 4640,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 4637,
                          "name": "_currentPeriodId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5364,
                          "src": "20528:16:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                            "typeString": "function () view returns (uint64)"
                          }
                        },
                        "id": 4638,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "20528:18:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 4639,
                        "name": "_periodId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4614,
                        "src": "20550:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "src": "20528:31:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "20516:43:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4642,
                  "nodeType": "ExpressionStatement",
                  "src": "20516:43:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4646,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4643,
                      "name": "startTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4622,
                      "src": "20570:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4644,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4631,
                        "src": "20582:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                          "typeString": "struct Finance.Period storage pointer"
                        }
                      },
                      "id": 4645,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "startTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3673,
                      "src": "20582:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "20570:28:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4647,
                  "nodeType": "ExpressionStatement",
                  "src": "20570:28:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4651,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4648,
                      "name": "endTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4624,
                      "src": "20608:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4649,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4631,
                        "src": "20618:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                          "typeString": "struct Finance.Period storage pointer"
                        }
                      },
                      "id": 4650,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "endTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3675,
                      "src": "20618:14:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "20608:24:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4652,
                  "nodeType": "ExpressionStatement",
                  "src": "20608:24:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4656,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4653,
                      "name": "firstTransactionId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4626,
                      "src": "20642:18:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4654,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4631,
                        "src": "20663:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                          "typeString": "struct Finance.Period storage pointer"
                        }
                      },
                      "id": 4655,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "firstTransactionId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3677,
                      "src": "20663:25:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20642:46:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4657,
                  "nodeType": "ExpressionStatement",
                  "src": "20642:46:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4661,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4658,
                      "name": "lastTransactionId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4628,
                      "src": "20698:17:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4659,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4631,
                        "src": "20718:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                          "typeString": "struct Finance.Period storage pointer"
                        }
                      },
                      "id": 4660,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "lastTransactionId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3679,
                      "src": "20718:24:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20698:44:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4662,
                  "nodeType": "ExpressionStatement",
                  "src": "20698:44:7"
                }
              ]
            },
            "documentation": null,
            "id": 4664,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4617,
                    "name": "_periodId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4614,
                    "src": "20246:9:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  }
                ],
                "id": 4618,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4616,
                  "name": "periodExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3832,
                  "src": "20233:12:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint64_$",
                    "typeString": "modifier (uint64)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "20233:23:7"
              }
            ],
            "name": "getPeriod",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4615,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4614,
                  "name": "_periodId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4664,
                  "src": "20179:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4613,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "20179:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20178:18:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4629,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4620,
                  "name": "isCurrent",
                  "nodeType": "VariableDeclaration",
                  "scope": 4664,
                  "src": "20287:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4619,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "20287:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4622,
                  "name": "startTime",
                  "nodeType": "VariableDeclaration",
                  "scope": 4664,
                  "src": "20315:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4621,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "20315:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4624,
                  "name": "endTime",
                  "nodeType": "VariableDeclaration",
                  "scope": 4664,
                  "src": "20345:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4623,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "20345:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4626,
                  "name": "firstTransactionId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4664,
                  "src": "20373:26:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4625,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20373:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4628,
                  "name": "lastTransactionId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4664,
                  "src": "20413:25:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4627,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20413:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20273:175:7"
            },
            "scope": 5528,
            "src": "20160:589:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4697,
              "nodeType": "Block",
              "src": "20937:182:7",
              "statements": [
                {
                  "assignments": [
                    4679
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4679,
                      "name": "tokenStatement",
                      "nodeType": "VariableDeclaration",
                      "scope": 4698,
                      "src": "20947:37:7",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TokenStatement_$3671_storage_ptr",
                        "typeString": "struct Finance.TokenStatement"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 4678,
                        "name": "TokenStatement",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3671,
                        "src": "20947:14:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenStatement_$3671_storage_ptr",
                          "typeString": "struct Finance.TokenStatement"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4686,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 4680,
                          "name": "periods",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3715,
                          "src": "20987:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$3684_storage_$",
                            "typeString": "mapping(uint64 => struct Finance.Period storage ref)"
                          }
                        },
                        "id": 4682,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 4681,
                          "name": "_periodId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4666,
                          "src": "20995:9:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "20987:18:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$3684_storage",
                          "typeString": "struct Finance.Period storage ref"
                        }
                      },
                      "id": 4683,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "tokenStatement",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3683,
                      "src": "20987:33:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TokenStatement_$3671_storage_$",
                        "typeString": "mapping(address => struct Finance.TokenStatement storage ref)"
                      }
                    },
                    "id": 4685,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 4684,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4668,
                      "src": "21021:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "20987:41:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TokenStatement_$3671_storage",
                      "typeString": "struct Finance.TokenStatement storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20947:81:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4690,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4687,
                      "name": "expenses",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4674,
                      "src": "21038:8:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4688,
                        "name": "tokenStatement",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4679,
                        "src": "21049:14:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenStatement_$3671_storage_ptr",
                          "typeString": "struct Finance.TokenStatement storage pointer"
                        }
                      },
                      "id": 4689,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "expenses",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3668,
                      "src": "21049:23:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21038:34:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4691,
                  "nodeType": "ExpressionStatement",
                  "src": "21038:34:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4695,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4692,
                      "name": "income",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4676,
                      "src": "21082:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4693,
                        "name": "tokenStatement",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4679,
                        "src": "21091:14:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenStatement_$3671_storage_ptr",
                          "typeString": "struct Finance.TokenStatement storage pointer"
                        }
                      },
                      "id": 4694,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "income",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3670,
                      "src": "21091:21:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21082:30:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4696,
                  "nodeType": "ExpressionStatement",
                  "src": "21082:30:7"
                }
              ]
            },
            "documentation": null,
            "id": 4698,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4671,
                    "name": "_periodId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4666,
                    "src": "20871:9:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  }
                ],
                "id": 4672,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4670,
                  "name": "periodExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3832,
                  "src": "20858:12:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint64_$",
                    "typeString": "modifier (uint64)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "20858:23:7"
              }
            ],
            "name": "getPeriodTokenStatement",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4669,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4666,
                  "name": "_periodId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4698,
                  "src": "20788:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4665,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "20788:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4668,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 4698,
                  "src": "20806:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4667,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20806:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20787:34:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4677,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4674,
                  "name": "expenses",
                  "nodeType": "VariableDeclaration",
                  "scope": 4698,
                  "src": "20899:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4673,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20899:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4676,
                  "name": "income",
                  "nodeType": "VariableDeclaration",
                  "scope": 4698,
                  "src": "20917:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4675,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20917:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20898:34:7"
            },
            "scope": 5528,
            "src": "20755:364:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4708,
              "nodeType": "Block",
              "src": "21302:42:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 4705,
                      "name": "_currentPeriodId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5364,
                      "src": "21319:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                        "typeString": "function () view returns (uint64)"
                      }
                    },
                    "id": 4706,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21319:18:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 4704,
                  "id": 4707,
                  "nodeType": "Return",
                  "src": "21312:25:7"
                }
              ]
            },
            "documentation": "@dev We have to check for initialization as periods are only valid after initializing",
            "id": 4709,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": null,
                "id": 4701,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4700,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10752,
                  "src": "21271:13:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "21271:13:7"
              }
            ],
            "name": "currentPeriodId",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4699,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "21256:2:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4704,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4703,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4709,
                  "src": "21294:6:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4702,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "21294:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21293:8:7"
            },
            "scope": 5528,
            "src": "21232:112:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4719,
              "nodeType": "Block",
              "src": "21529:47:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 4716,
                      "name": "settings",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3699,
                      "src": "21546:8:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Settings_$3695_storage",
                        "typeString": "struct Finance.Settings storage ref"
                      }
                    },
                    "id": 4717,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "periodDuration",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 3686,
                    "src": "21546:23:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 4715,
                  "id": 4718,
                  "nodeType": "Return",
                  "src": "21539:30:7"
                }
              ]
            },
            "documentation": "@dev We have to check for initialization as periods are only valid after initializing",
            "id": 4720,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": null,
                "id": 4712,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4711,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10752,
                  "src": "21498:13:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "21498:13:7"
              }
            ],
            "name": "getPeriodDuration",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4710,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "21483:2:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4715,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4714,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4720,
                  "src": "21521:6:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4713,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "21521:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21520:8:7"
            },
            "scope": 5528,
            "src": "21457:119:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4745,
              "nodeType": "Block",
              "src": "21791:98:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4736,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4731,
                      "name": "budget",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4727,
                      "src": "21801:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4732,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3699,
                          "src": "21810:8:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$3695_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 4733,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "budgets",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3690,
                        "src": "21810:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 4735,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 4734,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4722,
                        "src": "21827:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "21810:24:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21801:33:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4737,
                  "nodeType": "ExpressionStatement",
                  "src": "21801:33:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4743,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4738,
                      "name": "hasBudget",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4729,
                      "src": "21844:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4739,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3699,
                          "src": "21856:8:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$3695_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 4740,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hasBudget",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3694,
                        "src": "21856:18:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 4742,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 4741,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4722,
                        "src": "21875:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "21856:26:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "21844:38:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4744,
                  "nodeType": "ExpressionStatement",
                  "src": "21844:38:7"
                }
              ]
            },
            "documentation": "@dev We have to check for initialization as budgets are only valid after initializing",
            "id": 4746,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": null,
                "id": 4725,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4724,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10752,
                  "src": "21736:13:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "21736:13:7"
              }
            ],
            "name": "getBudget",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4723,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4722,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 4746,
                  "src": "21708:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4721,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21708:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21707:16:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4730,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4727,
                  "name": "budget",
                  "nodeType": "VariableDeclaration",
                  "scope": 4746,
                  "src": "21759:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4726,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21759:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4729,
                  "name": "hasBudget",
                  "nodeType": "VariableDeclaration",
                  "scope": 4746,
                  "src": "21775:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4728,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "21775:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21758:32:7"
            },
            "scope": 5528,
            "src": "21689:200:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4759,
              "nodeType": "Block",
              "src": "22090:51:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4756,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4748,
                        "src": "22127:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 4755,
                      "name": "_getRemainingBudget",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5410,
                      "src": "22107:19:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 4757,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22107:27:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4754,
                  "id": 4758,
                  "nodeType": "Return",
                  "src": "22100:34:7"
                }
              ]
            },
            "documentation": "@dev We have to check for initialization as budgets are only valid after initializing",
            "id": 4760,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": null,
                "id": 4751,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4750,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10752,
                  "src": "22058:13:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "22058:13:7"
              }
            ],
            "name": "getRemainingBudget",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4749,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4748,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 4760,
                  "src": "22030:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4747,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "22030:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22029:16:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4754,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4753,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4760,
                  "src": "22081:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4752,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22081:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22080:9:7"
            },
            "scope": 5528,
            "src": "22002:139:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4776,
              "nodeType": "Block",
              "src": "22352:56:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4772,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4762,
                        "src": "22385:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4773,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4764,
                        "src": "22393:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4771,
                      "name": "_canMakePayment",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5354,
                      "src": "22369:15:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) view returns (bool)"
                      }
                    },
                    "id": 4774,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22369:32:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4770,
                  "id": 4775,
                  "nodeType": "Return",
                  "src": "22362:39:7"
                }
              ]
            },
            "documentation": "@dev We have to check for initialization as budgets are only valid after initializing",
            "id": 4777,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": null,
                "id": 4767,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4766,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10752,
                  "src": "22323:13:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "22323:13:7"
              }
            ],
            "name": "canMakePayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4765,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4762,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 4777,
                  "src": "22278:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4761,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "22278:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4764,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4777,
                  "src": "22294:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4763,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22294:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22277:33:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4770,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4769,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4777,
                  "src": "22346:4:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4768,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "22346:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22345:6:7"
            },
            "scope": 5528,
            "src": "22254:154:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4791,
              "nodeType": "Block",
              "src": "22739:52:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4788,
                        "name": "_paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4779,
                        "src": "22773:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4787,
                      "name": "_nextPaymentTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5452,
                      "src": "22756:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint64_$",
                        "typeString": "function (uint256) view returns (uint64)"
                      }
                    },
                    "id": 4789,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22756:28:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 4786,
                  "id": 4790,
                  "nodeType": "Return",
                  "src": "22749:35:7"
                }
              ]
            },
            "documentation": "@dev Initialization check is implicitly provided by `scheduledPaymentExists()` as new\n     scheduled payments can only be created via `newScheduledPayment(),` which requires initialization",
            "id": 4792,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4782,
                    "name": "_paymentId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4779,
                    "src": "22710:10:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 4783,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4781,
                  "name": "scheduledPaymentExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3802,
                  "src": "22687:22:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "22687:34:7"
              }
            ],
            "name": "nextPaymentTime",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4780,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4779,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4792,
                  "src": "22655:18:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4778,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22655:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22654:20:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4786,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4785,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4792,
                  "src": "22731:6:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4784,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "22731:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22730:8:7"
            },
            "scope": 5528,
            "src": "22630:161:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4865,
              "nodeType": "Block",
              "src": "22939:1053:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4806,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4794,
                        "src": "22989:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4807,
                        "name": "_sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4800,
                        "src": "23009:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4808,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4796,
                        "src": "23030:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4809,
                        "name": "_reference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4798,
                        "src": "23051:10:7",
                        "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": 4805,
                      "name": "_recordIncomingTransaction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5125,
                      "src": "22949:26:7",
                      "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": 4810,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22949:122:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4811,
                  "nodeType": "ExpressionStatement",
                  "src": "22949:122:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 4814,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4812,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4794,
                      "src": "23086:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4813,
                      "name": "ETH",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10661,
                      "src": "23096:3:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "23086:13:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 4863,
                    "nodeType": "Block",
                    "src": "23174:812:7",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "id": 4827,
                          "name": "_isExternalDeposit",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4802,
                          "src": "23412:18:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 4844,
                        "nodeType": "IfStatement",
                        "src": "23408:305:7",
                        "trueBody": {
                          "id": 4843,
                          "nodeType": "Block",
                          "src": "23432:281:7",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 4833,
                                          "name": "msg",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 15153,
                                          "src": "23589:3:7",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_message",
                                            "typeString": "msg"
                                          }
                                        },
                                        "id": 4834,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "sender",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "23589:10:7",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 4836,
                                            "name": "this",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 15232,
                                            "src": "23609:4:7",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_contract$_Finance_$5528",
                                              "typeString": "contract Finance"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_contract$_Finance_$5528",
                                              "typeString": "contract Finance"
                                            }
                                          ],
                                          "id": 4835,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "23601:7:7",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_address_$",
                                            "typeString": "type(address)"
                                          },
                                          "typeName": "address"
                                        },
                                        "id": 4837,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "23601:13:7",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 4838,
                                        "name": "_amount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4796,
                                        "src": "23616:7:7",
                                        "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,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 4830,
                                            "name": "_token",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4794,
                                            "src": "23564:6:7",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "id": 4829,
                                          "name": "ERC20",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 14294,
                                          "src": "23558:5:7",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_ERC20_$14294_$",
                                            "typeString": "type(contract ERC20)"
                                          }
                                        },
                                        "id": 4831,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "23558:13:7",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_ERC20_$14294",
                                          "typeString": "contract ERC20"
                                        }
                                      },
                                      "id": 4832,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "safeTransferFrom",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 11016,
                                      "src": "23558:30:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ERC20_$14294_$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_contract$_ERC20_$14294_$",
                                        "typeString": "function (contract ERC20,address,address,uint256) returns (bool)"
                                      }
                                    },
                                    "id": 4839,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "23558:66:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 4840,
                                    "name": "ERROR_TOKEN_TRANSFER_FROM_REVERTED",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3621,
                                    "src": "23646:34:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_string_memory",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 4828,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    15156,
                                    15157
                                  ],
                                  "referencedDeclaration": 15157,
                                  "src": "23529:7:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 4841,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "23529:169:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 4842,
                              "nodeType": "ExpressionStatement",
                              "src": "23529:169:7"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4850,
                                  "name": "vault",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3697,
                                  "src": "23842:5:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Vault_$7857",
                                    "typeString": "contract Vault"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4851,
                                  "name": "_amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4796,
                                  "src": "23849:7:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_Vault_$7857",
                                    "typeString": "contract Vault"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 4847,
                                      "name": "_token",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4794,
                                      "src": "23822:6:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 4846,
                                    "name": "ERC20",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 14294,
                                    "src": "23816:5:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_ERC20_$14294_$",
                                      "typeString": "type(contract ERC20)"
                                    }
                                  },
                                  "id": 4848,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "23816:13:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ERC20_$14294",
                                    "typeString": "contract ERC20"
                                  }
                                },
                                "id": 4849,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "safeApprove",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 11044,
                                "src": "23816:25:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ERC20_$14294_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_contract$_ERC20_$14294_$",
                                  "typeString": "function (contract ERC20,address,uint256) returns (bool)"
                                }
                              },
                              "id": 4852,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "23816:41:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4853,
                              "name": "ERROR_TOKEN_APPROVE_FAILED",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3624,
                              "src": "23859:26:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_string_memory",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 4845,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              15156,
                              15157
                            ],
                            "referencedDeclaration": 15157,
                            "src": "23808:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4854,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23808:78:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4855,
                        "nodeType": "ExpressionStatement",
                        "src": "23808:78:7"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4859,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4794,
                              "src": "23959:6:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4860,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4796,
                              "src": "23967:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4856,
                              "name": "vault",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3697,
                              "src": "23945:5:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Vault_$7857",
                                "typeString": "contract Vault"
                              }
                            },
                            "id": 4858,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "deposit",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7709,
                            "src": "23945:13:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_payable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256) payable external"
                            }
                          },
                          "id": 4861,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23945:30:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4862,
                        "nodeType": "ExpressionStatement",
                        "src": "23945:30:7"
                      }
                    ]
                  },
                  "id": 4864,
                  "nodeType": "IfStatement",
                  "src": "23082:904:7",
                  "trueBody": {
                    "id": 4826,
                    "nodeType": "Block",
                    "src": "23101:67:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4822,
                              "name": "ETH",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10661,
                              "src": "23144:3:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4823,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4796,
                              "src": "23149:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 4820,
                                "name": "_amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4796,
                                "src": "23135:7:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4815,
                                  "name": "vault",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3697,
                                  "src": "23115:5:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Vault_$7857",
                                    "typeString": "contract Vault"
                                  }
                                },
                                "id": 4818,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "deposit",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 7709,
                                "src": "23115:13:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_payable$_t_address_$_t_uint256_$returns$__$",
                                  "typeString": "function (address,uint256) payable external"
                                }
                              },
                              "id": 4819,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "value",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "23115:19:7",
                              "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": 4821,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "23115:28:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_payable$_t_address_$_t_uint256_$returns$__$value",
                              "typeString": "function (address,uint256) payable external"
                            }
                          },
                          "id": 4824,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23115:42:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4825,
                        "nodeType": "ExpressionStatement",
                        "src": "23115:42:7"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 4866,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_deposit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4803,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4794,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 4866,
                  "src": "22836:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4793,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "22836:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4796,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4866,
                  "src": "22852:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4795,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22852:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4798,
                  "name": "_reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 4866,
                  "src": "22869:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 4797,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "22869:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4800,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 4866,
                  "src": "22888:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4799,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "22888:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4802,
                  "name": "_isExternalDeposit",
                  "nodeType": "VariableDeclaration",
                  "scope": 4866,
                  "src": "22905:23:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4801,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "22905:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22835:94:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4804,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "22939:0:7"
            },
            "scope": 5528,
            "src": "22818:1174:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4941,
              "nodeType": "Block",
              "src": "24070:920:7",
              "statements": [
                {
                  "assignments": [
                    4874
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4874,
                      "name": "payment",
                      "nodeType": "VariableDeclaration",
                      "scope": 4942,
                      "src": "24080:32:7",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                        "typeString": "struct Finance.ScheduledPayment"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 4873,
                        "name": "ScheduledPayment",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3649,
                        "src": "24080:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4878,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 4875,
                      "name": "scheduledPayments",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3703,
                      "src": "24115:17:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ScheduledPayment_$3649_storage_$",
                        "typeString": "mapping(uint256 => struct Finance.ScheduledPayment storage ref)"
                      }
                    },
                    "id": 4877,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 4876,
                      "name": "_paymentId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4868,
                      "src": "24133:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "24115:29:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage",
                      "typeString": "struct Finance.ScheduledPayment storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24080:64:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4882,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "24162:17:7",
                        "subExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4880,
                            "name": "payment",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4874,
                            "src": "24163:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                              "typeString": "struct Finance.ScheduledPayment storage pointer"
                            }
                          },
                          "id": 4881,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "inactive",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3638,
                          "src": "24163:16:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4883,
                        "name": "ERROR_PAYMENT_INACTIVE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3627,
                        "src": "24181:22:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4879,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "24154:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4884,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24154:50:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4885,
                  "nodeType": "ExpressionStatement",
                  "src": "24154:50:7"
                },
                {
                  "assignments": [
                    4887
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4887,
                      "name": "paid",
                      "nodeType": "VariableDeclaration",
                      "scope": 4942,
                      "src": "24215:11:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 4886,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "24215:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4889,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 4888,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "24229:1:7",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24215:15:7"
                },
                {
                  "body": {
                    "id": 4937,
                    "nodeType": "Block",
                    "src": "24337:625:7",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "id": 4906,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "24355:47:7",
                          "subExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4901,
                                  "name": "payment",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4874,
                                  "src": "24372:7:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                                    "typeString": "struct Finance.ScheduledPayment storage pointer"
                                  }
                                },
                                "id": 4902,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "token",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3632,
                                "src": "24372:13:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4903,
                                  "name": "payment",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4874,
                                  "src": "24387:7:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                                    "typeString": "struct Finance.ScheduledPayment storage pointer"
                                  }
                                },
                                "id": 4904,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "amount",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3640,
                                "src": "24387:14:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 4900,
                              "name": "_canMakePayment",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5354,
                              "src": "24356:15:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
                                "typeString": "function (address,uint256) view returns (bool)"
                              }
                            },
                            "id": 4905,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "24356:46:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 4913,
                        "nodeType": "IfStatement",
                        "src": "24351:140:7",
                        "trueBody": {
                          "id": 4912,
                          "nodeType": "Block",
                          "src": "24404:87:7",
                          "statements": [
                            {
                              "eventCall": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 4908,
                                    "name": "_paymentId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4868,
                                    "src": "24442:10:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 4907,
                                  "name": "PaymentFailure",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3769,
                                  "src": "24427:14:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256)"
                                  }
                                },
                                "id": 4909,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "24427:26:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 4910,
                              "nodeType": "EmitStatement",
                              "src": "24422:31:7"
                            },
                            {
                              "id": 4911,
                              "nodeType": "Break",
                              "src": "24471:5:7"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4918,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4914,
                              "name": "payment",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4874,
                              "src": "24583:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                                "typeString": "struct Finance.ScheduledPayment storage pointer"
                              }
                            },
                            "id": 4916,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "executions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3648,
                            "src": "24583:18:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 4917,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "24605:1:7",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "24583:23:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "id": 4919,
                        "nodeType": "ExpressionStatement",
                        "src": "24583:23:7"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4922,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 4920,
                            "name": "paid",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4887,
                            "src": "24620:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 4921,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "24628:1:7",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "24620:9:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "id": 4923,
                        "nodeType": "ExpressionStatement",
                        "src": "24620:9:7"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4925,
                                "name": "payment",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4874,
                                "src": "24774:7:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                                  "typeString": "struct Finance.ScheduledPayment storage pointer"
                                }
                              },
                              "id": 4926,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "token",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3632,
                              "src": "24774:13:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4927,
                                "name": "payment",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4874,
                                "src": "24805:7:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                                  "typeString": "struct Finance.ScheduledPayment storage pointer"
                                }
                              },
                              "id": 4928,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "receiver",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3634,
                              "src": "24805:16:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4929,
                                "name": "payment",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4874,
                                "src": "24839:7:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                                  "typeString": "struct Finance.ScheduledPayment storage pointer"
                                }
                              },
                              "id": 4930,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "amount",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3640,
                              "src": "24839:14:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4931,
                              "name": "_paymentId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4868,
                              "src": "24871:10:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4932,
                                "name": "payment",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4874,
                                "src": "24899:7:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                                  "typeString": "struct Finance.ScheduledPayment storage pointer"
                                }
                              },
                              "id": 4933,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "executions",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3648,
                              "src": "24899:18:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "",
                              "id": 4934,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "24935:2:7",
                              "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": 4924,
                            "name": "_unsafeMakePaymentTransaction",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5044,
                            "src": "24727:29:7",
                            "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": 4935,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "24727:224:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4936,
                        "nodeType": "ExpressionStatement",
                        "src": "24727:224:7"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 4899,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "id": 4895,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4891,
                            "name": "_paymentId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4868,
                            "src": "24264:10:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 4890,
                          "name": "_nextPaymentTime",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5452,
                          "src": "24247:16:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint64_$",
                            "typeString": "function (uint256) view returns (uint64)"
                          }
                        },
                        "id": 4892,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "24247:28:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 4893,
                          "name": "getTimestamp64",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11199,
                          "src": "24279:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                            "typeString": "function () view returns (uint64)"
                          }
                        },
                        "id": 4894,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "24279:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "src": "24247:48:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 4898,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 4896,
                        "name": "paid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4887,
                        "src": "24299:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 4897,
                        "name": "MAX_SCHEDULED_PAYMENTS_PER_TX",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3550,
                        "src": "24306:29:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "24299:36:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "24247:88:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4938,
                  "nodeType": "WhileStatement",
                  "src": "24240:722:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4939,
                    "name": "paid",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4887,
                    "src": "24979:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 4872,
                  "id": 4940,
                  "nodeType": "Return",
                  "src": "24972:11:7"
                }
              ]
            },
            "documentation": null,
            "id": 4942,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_executePayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4869,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4868,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4942,
                  "src": "24023:18:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4867,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24023:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24022:20:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4872,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4871,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4942,
                  "src": "24061:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4870,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24061:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24060:9:7"
            },
            "scope": 5528,
            "src": "23998:992:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4975,
              "nodeType": "Block",
              "src": "25061:300:7",
              "statements": [
                {
                  "assignments": [
                    4948
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4948,
                      "name": "paid",
                      "nodeType": "VariableDeclaration",
                      "scope": 4976,
                      "src": "25071:12:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4947,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "25071:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4952,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4950,
                        "name": "_paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4944,
                        "src": "25102:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4949,
                      "name": "_executePayment",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4942,
                      "src": "25086:15:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) returns (uint256)"
                      }
                    },
                    "id": 4951,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25086:27:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25071:42:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4955,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4953,
                      "name": "paid",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4948,
                      "src": "25127:4:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 4954,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25135:1:7",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "25127:9:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4974,
                  "nodeType": "IfStatement",
                  "src": "25123:232:7",
                  "trueBody": {
                    "id": 4973,
                    "nodeType": "Block",
                    "src": "25138:217:7",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          "id": 4961,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 4957,
                                "name": "_paymentId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4944,
                                "src": "25173:10:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 4956,
                              "name": "_nextPaymentTime",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5452,
                              "src": "25156:16:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint64_$",
                                "typeString": "function (uint256) view returns (uint64)"
                              }
                            },
                            "id": 4958,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "25156:28:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 4959,
                              "name": "getTimestamp64",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11199,
                              "src": "25188:14:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                                "typeString": "function () view returns (uint64)"
                              }
                            },
                            "id": 4960,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "25188:16:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "25156:48:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 4971,
                          "nodeType": "Block",
                          "src": "25278:67:7",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 4968,
                                    "name": "ERROR_EXECUTE_PAYMENT_TIME",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3615,
                                    "src": "25303:26:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 4967,
                                  "name": "revert",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    15158,
                                    15159
                                  ],
                                  "referencedDeclaration": 15159,
                                  "src": "25296:6:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (string memory) pure"
                                  }
                                },
                                "id": 4969,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "25296:34:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 4970,
                              "nodeType": "ExpressionStatement",
                              "src": "25296:34:7"
                            }
                          ]
                        },
                        "id": 4972,
                        "nodeType": "IfStatement",
                        "src": "25152:193:7",
                        "trueBody": {
                          "id": 4966,
                          "nodeType": "Block",
                          "src": "25206:66:7",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 4963,
                                    "name": "ERROR_EXECUTE_PAYMENT_NUM",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3612,
                                    "src": "25231:25:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 4962,
                                  "name": "revert",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    15158,
                                    15159
                                  ],
                                  "referencedDeclaration": 15159,
                                  "src": "25224:6:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (string memory) pure"
                                  }
                                },
                                "id": 4964,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "25224:33:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 4965,
                              "nodeType": "ExpressionStatement",
                              "src": "25224:33:7"
                            }
                          ]
                        }
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 4976,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_executePaymentAtLeastOnce",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4945,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4944,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4976,
                  "src": "25032:18:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4943,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25032:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25031:20:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4946,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "25061:0:7"
            },
            "scope": 5528,
            "src": "24996:365:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5009,
              "nodeType": "Block",
              "src": "25598:204:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4996,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4993,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4978,
                              "src": "25636:6:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 4992,
                            "name": "_getRemainingBudget",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5410,
                            "src": "25616:19:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view returns (uint256)"
                            }
                          },
                          "id": 4994,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25616:27:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 4995,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4982,
                          "src": "25647:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "25616:38:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4997,
                        "name": "ERROR_REMAINING_BUDGET",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3630,
                        "src": "25656:22:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4991,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "25608:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4998,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25608:71:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4999,
                  "nodeType": "ExpressionStatement",
                  "src": "25608:71:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5001,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4978,
                        "src": "25719:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5002,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4980,
                        "src": "25727:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5003,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4982,
                        "src": "25738:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5004,
                        "name": "_paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4984,
                        "src": "25747:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5005,
                        "name": "_paymentExecutionNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4986,
                        "src": "25759:23:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5006,
                        "name": "_reference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4988,
                        "src": "25784:10:7",
                        "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_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 5000,
                      "name": "_unsafeMakePaymentTransaction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5044,
                      "src": "25689:29:7",
                      "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": 5007,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25689:106:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5008,
                  "nodeType": "ExpressionStatement",
                  "src": "25689:106:7"
                }
              ]
            },
            "documentation": null,
            "id": 5010,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_makePaymentTransaction",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4989,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4978,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 5010,
                  "src": "25409:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4977,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "25409:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4980,
                  "name": "_receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 5010,
                  "src": "25433:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4979,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "25433:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4982,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 5010,
                  "src": "25460:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4981,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25460:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4984,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5010,
                  "src": "25485:18:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4983,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25485:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4986,
                  "name": "_paymentExecutionNumber",
                  "nodeType": "VariableDeclaration",
                  "scope": 5010,
                  "src": "25513:30:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4985,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "25513:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4988,
                  "name": "_reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 5010,
                  "src": "25553:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 4987,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "25553:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25399:177:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4990,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "25598:0:7"
            },
            "scope": 5528,
            "src": "25367:435:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5043,
              "nodeType": "Block",
              "src": "26183:266:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 5026,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "26225:5:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      },
                      {
                        "argumentTypes": null,
                        "id": 5027,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5012,
                        "src": "26244:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5028,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5014,
                        "src": "26264:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5029,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5016,
                        "src": "26287:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5030,
                        "name": "_paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5018,
                        "src": "26308:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5031,
                        "name": "_paymentExecutionNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5020,
                        "src": "26332:23:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5032,
                        "name": "_reference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5022,
                        "src": "26369:10:7",
                        "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": 5025,
                      "name": "_recordTransaction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5267,
                      "src": "26193:18:7",
                      "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": 5033,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26193:196:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5034,
                  "nodeType": "ExpressionStatement",
                  "src": "26193:196:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5038,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5012,
                        "src": "26415:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5039,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5014,
                        "src": "26423:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5040,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5016,
                        "src": "26434:7:7",
                        "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": 5035,
                        "name": "vault",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3697,
                        "src": "26400:5:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vault_$7857",
                          "typeString": "contract Vault"
                        }
                      },
                      "id": 5037,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7765,
                      "src": "26400:14:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256) external"
                      }
                    },
                    "id": 5041,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26400:42:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5042,
                  "nodeType": "ExpressionStatement",
                  "src": "26400:42:7"
                }
              ]
            },
            "documentation": "@dev Unsafe version of _makePaymentTransaction that assumes you have already checked the\n     remaining budget",
            "id": 5044,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_unsafeMakePaymentTransaction",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5023,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5012,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 5044,
                  "src": "25994:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5011,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "25994:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5014,
                  "name": "_receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 5044,
                  "src": "26018:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5013,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "26018:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5016,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 5044,
                  "src": "26045:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5015,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26045:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5018,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5044,
                  "src": "26070:18:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5017,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26070:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5020,
                  "name": "_paymentExecutionNumber",
                  "nodeType": "VariableDeclaration",
                  "scope": 5044,
                  "src": "26098:30:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 5019,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "26098:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5022,
                  "name": "_reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 5044,
                  "src": "26138:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5021,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "26138:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25984:177:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 5024,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26183:0:7"
            },
            "scope": 5528,
            "src": "25946:503:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5102,
              "nodeType": "Block",
              "src": "26528:704:7",
              "statements": [
                {
                  "assignments": [
                    5052
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5052,
                      "name": "newPeriodId",
                      "nodeType": "VariableDeclaration",
                      "scope": 5103,
                      "src": "26631:18:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 5051,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "26631:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5055,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 5054,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "++",
                    "prefix": false,
                    "src": "26652:15:7",
                    "subExpression": {
                      "argumentTypes": null,
                      "id": 5053,
                      "name": "periodsLength",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3717,
                      "src": "26652:13:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26631:36:7"
                },
                {
                  "assignments": [
                    5057
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5057,
                      "name": "period",
                      "nodeType": "VariableDeclaration",
                      "scope": 5103,
                      "src": "26678:21:7",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                        "typeString": "struct Finance.Period"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5056,
                        "name": "Period",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3684,
                        "src": "26678:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                          "typeString": "struct Finance.Period"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5061,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 5058,
                      "name": "periods",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3715,
                      "src": "26702:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$3684_storage_$",
                        "typeString": "mapping(uint64 => struct Finance.Period storage ref)"
                      }
                    },
                    "id": 5060,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 5059,
                      "name": "newPeriodId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5052,
                      "src": "26710:11:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "26702:20:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Period_$3684_storage",
                      "typeString": "struct Finance.Period storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26678:44:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5066,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5062,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5057,
                        "src": "26732:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                          "typeString": "struct Finance.Period storage pointer"
                        }
                      },
                      "id": 5064,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "startTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3673,
                      "src": "26732:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5065,
                      "name": "_startTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5046,
                      "src": "26751:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "26732:29:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 5067,
                  "nodeType": "ExpressionStatement",
                  "src": "26732:29:7"
                },
                {
                  "assignments": [
                    5069
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5069,
                      "name": "endTime",
                      "nodeType": "VariableDeclaration",
                      "scope": 5103,
                      "src": "26944:14:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 5068,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "26944:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5076,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 5075,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "id": 5073,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 5070,
                        "name": "_startTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5046,
                        "src": "26961:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5071,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3699,
                          "src": "26974:8:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$3695_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 5072,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "periodDuration",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3686,
                        "src": "26974:23:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "src": "26961:36:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 5074,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27000:1:7",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "26961:40:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26944:57:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 5079,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5077,
                      "name": "endTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5069,
                      "src": "27015:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 5078,
                      "name": "_startTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5046,
                      "src": "27025:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "27015:20:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5085,
                  "nodeType": "IfStatement",
                  "src": "27011:85:7",
                  "trueBody": {
                    "id": 5084,
                    "nodeType": "Block",
                    "src": "27037:59:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5082,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5080,
                            "name": "endTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "27065:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 5081,
                            "name": "MAX_UINT64",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3562,
                            "src": "27075:10:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "27065:20:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "id": 5083,
                        "nodeType": "ExpressionStatement",
                        "src": "27065:20:7"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5090,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5086,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5057,
                        "src": "27105:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                          "typeString": "struct Finance.Period storage pointer"
                        }
                      },
                      "id": 5088,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "endTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3675,
                      "src": "27105:14:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5089,
                      "name": "endTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5069,
                      "src": "27122:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "27105:24:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 5091,
                  "nodeType": "ExpressionStatement",
                  "src": "27105:24:7"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5093,
                        "name": "newPeriodId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5052,
                        "src": "27155:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5094,
                          "name": "period",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5057,
                          "src": "27168:6:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                            "typeString": "struct Finance.Period storage pointer"
                          }
                        },
                        "id": 5095,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "startTime",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3673,
                        "src": "27168:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5096,
                          "name": "period",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5057,
                          "src": "27186:6:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                            "typeString": "struct Finance.Period storage pointer"
                          }
                        },
                        "id": 5097,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "endTime",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3675,
                        "src": "27186:14:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 5092,
                      "name": "NewPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3725,
                      "src": "27145:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint64_$_t_uint64_$_t_uint64_$returns$__$",
                        "typeString": "function (uint64,uint64,uint64)"
                      }
                    },
                    "id": 5098,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27145:56:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5099,
                  "nodeType": "EmitStatement",
                  "src": "27140:61:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5100,
                    "name": "period",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5057,
                    "src": "27219:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                      "typeString": "struct Finance.Period storage pointer"
                    }
                  },
                  "functionReturnParameters": 5050,
                  "id": 5101,
                  "nodeType": "Return",
                  "src": "27212:13:7"
                }
              ]
            },
            "documentation": null,
            "id": 5103,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_newPeriod",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5047,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5046,
                  "name": "_startTime",
                  "nodeType": "VariableDeclaration",
                  "scope": 5103,
                  "src": "26475:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 5045,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "26475:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26474:19:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 5050,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5049,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5103,
                  "src": "26512:6:7",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                    "typeString": "struct Finance.Period"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5048,
                    "name": "Period",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3684,
                    "src": "26512:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                      "typeString": "struct Finance.Period"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26511:16:7"
            },
            "scope": 5528,
            "src": "26455:777:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5124,
              "nodeType": "Block",
              "src": "27402:288:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "74727565",
                        "id": 5115,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "27444:4:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "argumentTypes": null,
                        "id": 5116,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5105,
                        "src": "27486:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5117,
                        "name": "_sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5107,
                        "src": "27506:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5118,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5109,
                        "src": "27527:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5119,
                        "name": "NO_SCHEDULED_PAYMENT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3544,
                        "src": "27548:20:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 5120,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "27619:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "id": 5121,
                        "name": "_reference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5111,
                        "src": "27663:10:7",
                        "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": 5114,
                      "name": "_recordTransaction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5267,
                      "src": "27412:18:7",
                      "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": 5122,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27412:271:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5123,
                  "nodeType": "ExpressionStatement",
                  "src": "27412:271:7"
                }
              ]
            },
            "documentation": null,
            "id": 5125,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_recordIncomingTransaction",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5112,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5105,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 5125,
                  "src": "27283:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5104,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "27283:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5107,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 5125,
                  "src": "27307:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5106,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "27307:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5109,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 5125,
                  "src": "27332:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5108,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27332:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5111,
                  "name": "_reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 5125,
                  "src": "27357:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5110,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "27357:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27273:107:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 5113,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27402:0:7"
            },
            "scope": 5528,
            "src": "27238:452:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5266,
              "nodeType": "Block",
              "src": "27944:1091:7",
              "statements": [
                {
                  "assignments": [
                    5143
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5143,
                      "name": "periodId",
                      "nodeType": "VariableDeclaration",
                      "scope": 5267,
                      "src": "27954:15:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 5142,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "27954:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5146,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 5144,
                      "name": "_currentPeriodId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5364,
                      "src": "27972:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                        "typeString": "function () view returns (uint64)"
                      }
                    },
                    "id": 5145,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27972:18:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "27954:36:7"
                },
                {
                  "assignments": [
                    5148
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5148,
                      "name": "tokenStatement",
                      "nodeType": "VariableDeclaration",
                      "scope": 5267,
                      "src": "28000:37:7",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TokenStatement_$3671_storage_ptr",
                        "typeString": "struct Finance.TokenStatement"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5147,
                        "name": "TokenStatement",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3671,
                        "src": "28000:14:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenStatement_$3671_storage_ptr",
                          "typeString": "struct Finance.TokenStatement"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5155,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 5149,
                          "name": "periods",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3715,
                          "src": "28040:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$3684_storage_$",
                            "typeString": "mapping(uint64 => struct Finance.Period storage ref)"
                          }
                        },
                        "id": 5151,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 5150,
                          "name": "periodId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5143,
                          "src": "28048:8:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "28040:17:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$3684_storage",
                          "typeString": "struct Finance.Period storage ref"
                        }
                      },
                      "id": 5152,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "tokenStatement",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3683,
                      "src": "28040:32:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TokenStatement_$3671_storage_$",
                        "typeString": "mapping(address => struct Finance.TokenStatement storage ref)"
                      }
                    },
                    "id": 5154,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 5153,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5129,
                      "src": "28073:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "28040:40:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TokenStatement_$3671_storage",
                      "typeString": "struct Finance.TokenStatement storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28000:80:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 5156,
                    "name": "_incoming",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5127,
                    "src": "28094:9:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 5178,
                    "nodeType": "Block",
                    "src": "28194:87:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5176,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 5168,
                              "name": "tokenStatement",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5148,
                              "src": "28208:14:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TokenStatement_$3671_storage_ptr",
                                "typeString": "struct Finance.TokenStatement storage pointer"
                              }
                            },
                            "id": 5170,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "expenses",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3668,
                            "src": "28208:23:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 5174,
                                "name": "_amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5133,
                                "src": "28262:7:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 5171,
                                  "name": "tokenStatement",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5148,
                                  "src": "28234:14:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TokenStatement_$3671_storage_ptr",
                                    "typeString": "struct Finance.TokenStatement storage pointer"
                                  }
                                },
                                "id": 5172,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "expenses",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3668,
                                "src": "28234:23:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5173,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14042,
                              "src": "28234:27:7",
                              "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": 5175,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "28234:36:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "28208:62:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5177,
                        "nodeType": "ExpressionStatement",
                        "src": "28208:62:7"
                      }
                    ]
                  },
                  "id": 5179,
                  "nodeType": "IfStatement",
                  "src": "28090:191:7",
                  "trueBody": {
                    "id": 5167,
                    "nodeType": "Block",
                    "src": "28105:83:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5165,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 5157,
                              "name": "tokenStatement",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5148,
                              "src": "28119:14:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TokenStatement_$3671_storage_ptr",
                                "typeString": "struct Finance.TokenStatement storage pointer"
                              }
                            },
                            "id": 5159,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "income",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3670,
                            "src": "28119:21:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 5163,
                                "name": "_amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5133,
                                "src": "28169:7:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 5160,
                                  "name": "tokenStatement",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5148,
                                  "src": "28143:14:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TokenStatement_$3671_storage_ptr",
                                    "typeString": "struct Finance.TokenStatement storage pointer"
                                  }
                                },
                                "id": 5161,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "income",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3670,
                                "src": "28143:21:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5162,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14042,
                              "src": "28143:25:7",
                              "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": 5164,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "28143:34:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "28119:58:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5166,
                        "nodeType": "ExpressionStatement",
                        "src": "28119:58:7"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    5181
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5181,
                      "name": "transactionId",
                      "nodeType": "VariableDeclaration",
                      "scope": 5267,
                      "src": "28291:21:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5180,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "28291:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5184,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 5183,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "++",
                    "prefix": false,
                    "src": "28315:23:7",
                    "subExpression": {
                      "argumentTypes": null,
                      "id": 5182,
                      "name": "transactionsNextIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3711,
                      "src": "28315:21:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28291:47:7"
                },
                {
                  "assignments": [
                    5186
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5186,
                      "name": "transaction",
                      "nodeType": "VariableDeclaration",
                      "scope": 5267,
                      "src": "28349:31:7",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                        "typeString": "struct Finance.Transaction"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5185,
                        "name": "Transaction",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3666,
                        "src": "28349:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5190,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 5187,
                      "name": "transactions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3709,
                      "src": "28383:12:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Transaction_$3666_storage_$",
                        "typeString": "mapping(uint256 => struct Finance.Transaction storage ref)"
                      }
                    },
                    "id": 5189,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 5188,
                      "name": "transactionId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5181,
                      "src": "28396:13:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "28383:27:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Transaction_$3666_storage",
                      "typeString": "struct Finance.Transaction storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28349:61:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5195,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5191,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5186,
                        "src": "28420:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 5193,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "token",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3651,
                      "src": "28420:17:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5194,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5129,
                      "src": "28440:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "28420:26:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 5196,
                  "nodeType": "ExpressionStatement",
                  "src": "28420:26:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5201,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5197,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5186,
                        "src": "28456:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 5199,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "entity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3653,
                      "src": "28456:18:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5200,
                      "name": "_entity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5131,
                      "src": "28477:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "28456:28:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 5202,
                  "nodeType": "ExpressionStatement",
                  "src": "28456:28:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5207,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5203,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5186,
                        "src": "28494:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 5205,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "isIncoming",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3655,
                      "src": "28494:22:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5206,
                      "name": "_incoming",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5127,
                      "src": "28519:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "28494:34:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5208,
                  "nodeType": "ExpressionStatement",
                  "src": "28494:34:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5213,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5209,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5186,
                        "src": "28538:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 5211,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3657,
                      "src": "28538:18:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5212,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5133,
                      "src": "28559:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "28538:28:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5214,
                  "nodeType": "ExpressionStatement",
                  "src": "28538:28:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5219,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5215,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5186,
                        "src": "28576:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 5217,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "paymentId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3659,
                      "src": "28576:21:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5218,
                      "name": "_paymentId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5135,
                      "src": "28600:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "28576:34:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5220,
                  "nodeType": "ExpressionStatement",
                  "src": "28576:34:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5225,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5221,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5186,
                        "src": "28620:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 5223,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "paymentExecutionNumber",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3661,
                      "src": "28620:34:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5224,
                      "name": "_paymentExecutionNumber",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5137,
                      "src": "28657:23:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "28620:60:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 5226,
                  "nodeType": "ExpressionStatement",
                  "src": "28620:60:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5232,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5227,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5186,
                        "src": "28690:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 5229,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "date",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3663,
                      "src": "28690:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 5230,
                        "name": "getTimestamp64",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11199,
                        "src": "28709:14:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                          "typeString": "function () view returns (uint64)"
                        }
                      },
                      "id": 5231,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "28709:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "28690:35:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 5233,
                  "nodeType": "ExpressionStatement",
                  "src": "28690:35:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5238,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5234,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5186,
                        "src": "28735:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 5236,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "periodId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3665,
                      "src": "28735:20:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5237,
                      "name": "periodId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5143,
                      "src": "28758:8:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "28735:31:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 5239,
                  "nodeType": "ExpressionStatement",
                  "src": "28735:31:7"
                },
                {
                  "assignments": [
                    5241
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5241,
                      "name": "period",
                      "nodeType": "VariableDeclaration",
                      "scope": 5267,
                      "src": "28777:21:7",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                        "typeString": "struct Finance.Period"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5240,
                        "name": "Period",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3684,
                        "src": "28777:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                          "typeString": "struct Finance.Period"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5245,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 5242,
                      "name": "periods",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3715,
                      "src": "28801:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$3684_storage_$",
                        "typeString": "mapping(uint64 => struct Finance.Period storage ref)"
                      }
                    },
                    "id": 5244,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 5243,
                      "name": "periodId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5143,
                      "src": "28809:8:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "28801:17:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Period_$3684_storage",
                      "typeString": "struct Finance.Period storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28777:41:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5249,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5246,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5241,
                        "src": "28832:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                          "typeString": "struct Finance.Period storage pointer"
                        }
                      },
                      "id": 5247,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "firstTransactionId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3677,
                      "src": "28832:25:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 5248,
                      "name": "NO_TRANSACTION",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3547,
                      "src": "28861:14:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "28832:43:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5257,
                  "nodeType": "IfStatement",
                  "src": "28828:115:7",
                  "trueBody": {
                    "id": 5256,
                    "nodeType": "Block",
                    "src": "28877:66:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5254,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 5250,
                              "name": "period",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5241,
                              "src": "28891:6:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                                "typeString": "struct Finance.Period storage pointer"
                              }
                            },
                            "id": 5252,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "firstTransactionId",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3677,
                            "src": "28891:25:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 5253,
                            "name": "transactionId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5181,
                            "src": "28919:13:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "28891:41:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5255,
                        "nodeType": "ExpressionStatement",
                        "src": "28891:41:7"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5259,
                        "name": "transactionId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5181,
                        "src": "28973:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5260,
                        "name": "_incoming",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5127,
                        "src": "28988:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5261,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5131,
                        "src": "28999:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5262,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5133,
                        "src": "29008:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5263,
                        "name": "_reference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5139,
                        "src": "29017:10:7",
                        "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": 5258,
                      "name": "NewTransaction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3755,
                      "src": "28958:14:7",
                      "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": 5264,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "28958:70:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5265,
                  "nodeType": "EmitStatement",
                  "src": "28953:75:7"
                }
              ]
            },
            "documentation": null,
            "id": 5267,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_recordTransaction",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5140,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5127,
                  "name": "_incoming",
                  "nodeType": "VariableDeclaration",
                  "scope": 5267,
                  "src": "27733:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5126,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "27733:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5129,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 5267,
                  "src": "27757:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5128,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "27757:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5131,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 5267,
                  "src": "27781:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5130,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "27781:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5133,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 5267,
                  "src": "27806:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5132,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27806:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5135,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5267,
                  "src": "27831:18:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5134,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27831:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5137,
                  "name": "_paymentExecutionNumber",
                  "nodeType": "VariableDeclaration",
                  "scope": 5267,
                  "src": "27859:30:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 5136,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "27859:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5139,
                  "name": "_reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 5267,
                  "src": "27899:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5138,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "27899:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27723:199:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 5141,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27944:0:7"
            },
            "scope": 5528,
            "src": "27696:1339:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5330,
              "nodeType": "Block",
              "src": "29137:1019:7",
              "statements": [
                {
                  "assignments": [
                    5275
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5275,
                      "name": "currentPeriod",
                      "nodeType": "VariableDeclaration",
                      "scope": 5331,
                      "src": "29147:28:7",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                        "typeString": "struct Finance.Period"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5274,
                        "name": "Period",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3684,
                        "src": "29147:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                          "typeString": "struct Finance.Period"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5280,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 5276,
                      "name": "periods",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3715,
                      "src": "29178:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$3684_storage_$",
                        "typeString": "mapping(uint64 => struct Finance.Period storage ref)"
                      }
                    },
                    "id": 5279,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 5277,
                        "name": "_currentPeriodId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5364,
                        "src": "29186:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                          "typeString": "function () view returns (uint64)"
                        }
                      },
                      "id": 5278,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "29186:18:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "29178:27:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Period_$3684_storage",
                      "typeString": "struct Finance.Period storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "29147:58:7"
                },
                {
                  "assignments": [
                    5282
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5282,
                      "name": "timestamp",
                      "nodeType": "VariableDeclaration",
                      "scope": 5331,
                      "src": "29215:16:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 5281,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "29215:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5285,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 5283,
                      "name": "getTimestamp64",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11199,
                      "src": "29234:14:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                        "typeString": "function () view returns (uint64)"
                      }
                    },
                    "id": 5284,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29234:16:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "29215:35:7"
                },
                {
                  "body": {
                    "id": 5326,
                    "nodeType": "Block",
                    "src": "29346:782:7",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          "id": 5292,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 5290,
                            "name": "_maxTransitions",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5269,
                            "src": "29364:15:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 5291,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "29383:1:7",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "29364:20:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 5296,
                        "nodeType": "IfStatement",
                        "src": "29360:215:7",
                        "trueBody": {
                          "id": 5295,
                          "nodeType": "Block",
                          "src": "29386:189:7",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "hexValue": "66616c7365",
                                "id": 5293,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "29555:5:7",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              "functionReturnParameters": 5273,
                              "id": 5294,
                              "nodeType": "Return",
                              "src": "29548:12:7"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5299,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5297,
                            "name": "_maxTransitions",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5269,
                            "src": "29651:15:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 5298,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "29670:1:7",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "29651:20:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "id": 5300,
                        "nodeType": "ExpressionStatement",
                        "src": "29651:20:7"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5304,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 5301,
                              "name": "currentPeriod",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5275,
                              "src": "29851:13:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                                "typeString": "struct Finance.Period storage pointer"
                              }
                            },
                            "id": 5302,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "firstTransactionId",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3677,
                            "src": "29851:32:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 5303,
                            "name": "NO_TRANSACTION",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3547,
                            "src": "29887:14:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "29851:50:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 5315,
                        "nodeType": "IfStatement",
                        "src": "29847:151:7",
                        "trueBody": {
                          "id": 5314,
                          "nodeType": "Block",
                          "src": "29903:95:7",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 5312,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 5305,
                                    "name": "currentPeriod",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5275,
                                    "src": "29921:13:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                                      "typeString": "struct Finance.Period storage pointer"
                                    }
                                  },
                                  "id": 5307,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "lastTransactionId",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3679,
                                  "src": "29921:31:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "31",
                                      "id": 5310,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "29981:1:7",
                                      "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": 5308,
                                      "name": "transactionsNextIndex",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3711,
                                      "src": "29955:21:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 5309,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sub",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 14017,
                                    "src": "29955:25:7",
                                    "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": 5311,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "29955:28:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "29921:62:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5313,
                              "nodeType": "ExpressionStatement",
                              "src": "29921:62:7"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5324,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5316,
                            "name": "currentPeriod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5275,
                            "src": "30061:13:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                              "typeString": "struct Finance.Period storage pointer"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 5321,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "30114:1:7",
                                    "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": 5318,
                                      "name": "currentPeriod",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5275,
                                      "src": "30088:13:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                                        "typeString": "struct Finance.Period storage pointer"
                                      }
                                    },
                                    "id": 5319,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "endTime",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3675,
                                    "src": "30088:21:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint64",
                                      "typeString": "uint64"
                                    }
                                  },
                                  "id": 5320,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "add",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 14184,
                                  "src": "30088:25:7",
                                  "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": 5322,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "30088:28:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              ],
                              "id": 5317,
                              "name": "_newPeriod",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5103,
                              "src": "30077:10:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_uint64_$returns$_t_struct$_Period_$3684_storage_ptr_$",
                                "typeString": "function (uint64) returns (struct Finance.Period storage pointer)"
                              }
                            },
                            "id": 5323,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "30077:40:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                              "typeString": "struct Finance.Period storage pointer"
                            }
                          },
                          "src": "30061:56:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                            "typeString": "struct Finance.Period storage pointer"
                          }
                        },
                        "id": 5325,
                        "nodeType": "ExpressionStatement",
                        "src": "30061:56:7"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 5289,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5286,
                      "name": "timestamp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5282,
                      "src": "29311:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5287,
                        "name": "currentPeriod",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5275,
                        "src": "29323:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                          "typeString": "struct Finance.Period storage pointer"
                        }
                      },
                      "id": 5288,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "endTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3675,
                      "src": "29323:21:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "29311:33:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5327,
                  "nodeType": "WhileStatement",
                  "src": "29304:824:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 5328,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "30145:4:7",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 5273,
                  "id": 5329,
                  "nodeType": "Return",
                  "src": "30138:11:7"
                }
              ]
            },
            "documentation": null,
            "id": 5331,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_tryTransitionAccountingPeriod",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5270,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5269,
                  "name": "_maxTransitions",
                  "nodeType": "VariableDeclaration",
                  "scope": 5331,
                  "src": "29081:22:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 5268,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "29081:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "29080:24:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 5273,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5272,
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 5331,
                  "src": "29123:12:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5271,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "29123:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "29122:14:7"
            },
            "scope": 5528,
            "src": "29041:1115:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5353,
              "nodeType": "Block",
              "src": "30249:98:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 5351,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 5344,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5341,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5333,
                            "src": "30286:6:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 5340,
                          "name": "_getRemainingBudget",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5410,
                          "src": "30266:19:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view returns (uint256)"
                          }
                        },
                        "id": 5342,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "30266:27:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 5343,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5335,
                        "src": "30297:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "30266:38:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 5350,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5347,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5333,
                            "src": "30322:6:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5345,
                            "name": "vault",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3697,
                            "src": "30308:5:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Vault_$7857",
                              "typeString": "contract Vault"
                            }
                          },
                          "id": 5346,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balance",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7791,
                          "src": "30308:13:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view external returns (uint256)"
                          }
                        },
                        "id": 5348,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "30308:21:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 5349,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5335,
                        "src": "30333:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "30308:32:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "30266:74:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 5339,
                  "id": 5352,
                  "nodeType": "Return",
                  "src": "30259:81:7"
                }
              ]
            },
            "documentation": null,
            "id": 5354,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_canMakePayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5336,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5333,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 5354,
                  "src": "30187:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5332,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "30187:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5335,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 5354,
                  "src": "30203:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5334,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30203:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "30186:33:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 5339,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5338,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5354,
                  "src": "30243:4:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5337,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "30243:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "30242:6:7"
            },
            "scope": 5528,
            "src": "30162:185:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5363,
              "nodeType": "Block",
              "src": "30412:129:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 5361,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5359,
                      "name": "periodsLength",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3717,
                      "src": "30517:13:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 5360,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30533:1:7",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "30517:17:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 5358,
                  "id": 5362,
                  "nodeType": "Return",
                  "src": "30510:24:7"
                }
              ]
            },
            "documentation": null,
            "id": 5364,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_currentPeriodId",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5355,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "30378:2:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 5358,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5357,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5364,
                  "src": "30404:6:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 5356,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "30404:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "30403:8:7"
            },
            "scope": 5528,
            "src": "30353:188:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5409,
              "nodeType": "Block",
              "src": "30624:541:7",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 5375,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "30638:27:7",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5371,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3699,
                          "src": "30639:8:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$3695_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 5372,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hasBudget",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3694,
                        "src": "30639:18:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 5374,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 5373,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5366,
                        "src": "30658:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "30639:26:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5379,
                  "nodeType": "IfStatement",
                  "src": "30634:76:7",
                  "trueBody": {
                    "id": 5378,
                    "nodeType": "Block",
                    "src": "30667:43:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5376,
                          "name": "MAX_UINT256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3556,
                          "src": "30688:11:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5370,
                        "id": 5377,
                        "nodeType": "Return",
                        "src": "30681:18:7"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    5381
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5381,
                      "name": "budget",
                      "nodeType": "VariableDeclaration",
                      "scope": 5410,
                      "src": "30720:14:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5380,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "30720:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5386,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5382,
                        "name": "settings",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3699,
                        "src": "30737:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Settings_$3695_storage",
                          "typeString": "struct Finance.Settings storage ref"
                        }
                      },
                      "id": 5383,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "budgets",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3690,
                      "src": "30737:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 5385,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 5384,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5366,
                      "src": "30754:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "30737:24:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "30720:41:7"
                },
                {
                  "assignments": [
                    5388
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5388,
                      "name": "spent",
                      "nodeType": "VariableDeclaration",
                      "scope": 5410,
                      "src": "30771:13:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5387,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "30771:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5397,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 5389,
                            "name": "periods",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3715,
                            "src": "30787:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$3684_storage_$",
                              "typeString": "mapping(uint64 => struct Finance.Period storage ref)"
                            }
                          },
                          "id": 5392,
                          "indexExpression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 5390,
                              "name": "_currentPeriodId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5364,
                              "src": "30795:16:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                                "typeString": "function () view returns (uint64)"
                              }
                            },
                            "id": 5391,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "30795:18:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "30787:27:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Period_$3684_storage",
                            "typeString": "struct Finance.Period storage ref"
                          }
                        },
                        "id": 5393,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "tokenStatement",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3683,
                        "src": "30787:42:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TokenStatement_$3671_storage_$",
                          "typeString": "mapping(address => struct Finance.TokenStatement storage ref)"
                        }
                      },
                      "id": 5395,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 5394,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5366,
                        "src": "30830:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "30787:50:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TokenStatement_$3671_storage",
                        "typeString": "struct Finance.TokenStatement storage ref"
                      }
                    },
                    "id": 5396,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "expenses",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 3668,
                    "src": "30787:59:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "30771:75:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5400,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5398,
                      "name": "spent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5388,
                      "src": "31018:5:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 5399,
                      "name": "budget",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5381,
                      "src": "31027:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "31018:15:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5404,
                  "nodeType": "IfStatement",
                  "src": "31014:54:7",
                  "trueBody": {
                    "id": 5403,
                    "nodeType": "Block",
                    "src": "31035:33:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 5401,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "31056:1:7",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 5370,
                        "id": 5402,
                        "nodeType": "Return",
                        "src": "31049:8:7"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5407,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5405,
                      "name": "budget",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5381,
                      "src": "31144:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 5406,
                      "name": "spent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5388,
                      "src": "31153:5:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "31144:14:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 5370,
                  "id": 5408,
                  "nodeType": "Return",
                  "src": "31137:21:7"
                }
              ]
            },
            "documentation": null,
            "id": 5410,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_getRemainingBudget",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5367,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5366,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 5410,
                  "src": "30576:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5365,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "30576:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "30575:16:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 5370,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5369,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5410,
                  "src": "30615:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5368,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30615:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "30614:9:7"
            },
            "scope": 5528,
            "src": "30547:618:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5451,
              "nodeType": "Block",
              "src": "31248:488:7",
              "statements": [
                {
                  "assignments": [
                    5418
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5418,
                      "name": "payment",
                      "nodeType": "VariableDeclaration",
                      "scope": 5452,
                      "src": "31258:32:7",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                        "typeString": "struct Finance.ScheduledPayment"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5417,
                        "name": "ScheduledPayment",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3649,
                        "src": "31258:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5422,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 5419,
                      "name": "scheduledPayments",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3703,
                      "src": "31293:17:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ScheduledPayment_$3649_storage_$",
                        "typeString": "mapping(uint256 => struct Finance.ScheduledPayment storage ref)"
                      }
                    },
                    "id": 5421,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 5420,
                      "name": "_paymentId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5412,
                      "src": "31311:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "31293:29:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage",
                      "typeString": "struct Finance.ScheduledPayment storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31258:64:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 5427,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5423,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5418,
                        "src": "31337:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 5424,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "executions",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3648,
                      "src": "31337:18:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5425,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5418,
                        "src": "31359:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 5426,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "maxExecutions",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3646,
                      "src": "31359:21:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "31337:43:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5431,
                  "nodeType": "IfStatement",
                  "src": "31333:165:7",
                  "trueBody": {
                    "id": 5430,
                    "nodeType": "Block",
                    "src": "31382:116:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5428,
                          "name": "MAX_UINT64",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3562,
                          "src": "31403:10:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "functionReturnParameters": 5416,
                        "id": 5429,
                        "nodeType": "Return",
                        "src": "31396:17:7"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    5433
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5433,
                      "name": "increase",
                      "nodeType": "VariableDeclaration",
                      "scope": 5452,
                      "src": "31572:15:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 5432,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "31572:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5440,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5437,
                          "name": "payment",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5418,
                          "src": "31613:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                            "typeString": "struct Finance.ScheduledPayment storage pointer"
                          }
                        },
                        "id": 5438,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "interval",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3644,
                        "src": "31613:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5434,
                          "name": "payment",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5418,
                          "src": "31590:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                            "typeString": "struct Finance.ScheduledPayment storage pointer"
                          }
                        },
                        "id": 5435,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "executions",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3648,
                        "src": "31590:18:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "id": 5436,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14109,
                      "src": "31590:22:7",
                      "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": 5439,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31590:40:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31572:58:7"
                },
                {
                  "assignments": [
                    5442
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5442,
                      "name": "nextPayment",
                      "nodeType": "VariableDeclaration",
                      "scope": 5452,
                      "src": "31640:18:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 5441,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "31640:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5448,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5446,
                        "name": "increase",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5433,
                        "src": "31692:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5443,
                          "name": "payment",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5418,
                          "src": "31661:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                            "typeString": "struct Finance.ScheduledPayment storage pointer"
                          }
                        },
                        "id": 5444,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "initialPaymentTime",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3642,
                        "src": "31661:26:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "id": 5445,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14184,
                      "src": "31661:30:7",
                      "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": 5447,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31661:40:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31640:61:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5449,
                    "name": "nextPayment",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5442,
                    "src": "31718:11:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 5416,
                  "id": 5450,
                  "nodeType": "Return",
                  "src": "31711:18:7"
                }
              ]
            },
            "documentation": null,
            "id": 5452,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_nextPaymentTime",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5413,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5412,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5452,
                  "src": "31197:18:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5411,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31197:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "31196:20:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 5416,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5415,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5452,
                  "src": "31240:6:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 5414,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "31240:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "31239:8:7"
            },
            "scope": 5528,
            "src": "31171:565:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5518,
              "nodeType": "Block",
              "src": "31885:169:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5476,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5470,
                      "name": "r",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5468,
                      "src": "31895:1:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[] memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "36",
                          "id": 5474,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "31913:1:7",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_6_by_1",
                            "typeString": "int_const 6"
                          },
                          "value": "6"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_6_by_1",
                            "typeString": "int_const 6"
                          }
                        ],
                        "id": 5473,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "NewExpression",
                        "src": "31899:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$",
                          "typeString": "function (uint256) pure returns (uint256[] memory)"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 5471,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "31903:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 5472,
                          "length": null,
                          "nodeType": "ArrayTypeName",
                          "src": "31903:9:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        }
                      },
                      "id": 5475,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "31899:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory",
                        "typeString": "uint256[] memory"
                      }
                    },
                    "src": "31895:20:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "id": 5477,
                  "nodeType": "ExpressionStatement",
                  "src": "31895:20:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5484,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5478,
                        "name": "r",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5468,
                        "src": "31925:1:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      "id": 5480,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 5479,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "31927:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "31925:4:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 5482,
                          "name": "_a",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5454,
                          "src": "31940:2:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 5481,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "31932:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 5483,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "31932:11:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "31925:18:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5485,
                  "nodeType": "ExpressionStatement",
                  "src": "31925:18:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5492,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5486,
                        "name": "r",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5468,
                        "src": "31953:1:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      "id": 5488,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 5487,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "31955:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "31953:4:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 5490,
                          "name": "_b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5456,
                          "src": "31968:2:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 5489,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "31960:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 5491,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "31960:11:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "31953:18:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5493,
                  "nodeType": "ExpressionStatement",
                  "src": "31953:18:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5498,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5494,
                        "name": "r",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5468,
                        "src": "31981:1:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      "id": 5496,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "32",
                        "id": 5495,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "31983:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "31981:4:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5497,
                      "name": "_c",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5458,
                      "src": "31988:2:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "31981:9:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5499,
                  "nodeType": "ExpressionStatement",
                  "src": "31981:9:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5504,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5500,
                        "name": "r",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5468,
                        "src": "32000:1:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      "id": 5502,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "33",
                        "id": 5501,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "32002:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_3_by_1",
                          "typeString": "int_const 3"
                        },
                        "value": "3"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "32000:4:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5503,
                      "name": "_d",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5460,
                      "src": "32007:2:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "32000:9:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5505,
                  "nodeType": "ExpressionStatement",
                  "src": "32000:9:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5510,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5506,
                        "name": "r",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5468,
                        "src": "32019:1:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      "id": 5508,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "34",
                        "id": 5507,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "32021:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_4_by_1",
                          "typeString": "int_const 4"
                        },
                        "value": "4"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "32019:4:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5509,
                      "name": "_e",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5462,
                      "src": "32026:2:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "32019:9:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5511,
                  "nodeType": "ExpressionStatement",
                  "src": "32019:9:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5516,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5512,
                        "name": "r",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5468,
                        "src": "32038:1:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      "id": 5514,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "35",
                        "id": 5513,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "32040:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_5_by_1",
                          "typeString": "int_const 5"
                        },
                        "value": "5"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "32038:4:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5515,
                      "name": "_f",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5464,
                      "src": "32045:2:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "32038:9:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5517,
                  "nodeType": "ExpressionStatement",
                  "src": "32038:9:7"
                }
              ]
            },
            "documentation": null,
            "id": 5519,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_arr",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5465,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5454,
                  "name": "_a",
                  "nodeType": "VariableDeclaration",
                  "scope": 5519,
                  "src": "31777:10:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5453,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "31777:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5456,
                  "name": "_b",
                  "nodeType": "VariableDeclaration",
                  "scope": 5519,
                  "src": "31789:10:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5455,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "31789:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5458,
                  "name": "_c",
                  "nodeType": "VariableDeclaration",
                  "scope": 5519,
                  "src": "31801:10:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5457,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31801:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5460,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 5519,
                  "src": "31813:10:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5459,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31813:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5462,
                  "name": "_e",
                  "nodeType": "VariableDeclaration",
                  "scope": 5519,
                  "src": "31825:10:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5461,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31825:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5464,
                  "name": "_f",
                  "nodeType": "VariableDeclaration",
                  "scope": 5519,
                  "src": "31837:10:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5463,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31837:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "31776:72:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 5469,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5468,
                  "name": "r",
                  "nodeType": "VariableDeclaration",
                  "scope": 5519,
                  "src": "31872:11:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 5466,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "31872:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5467,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "31872:9:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "31871:13:7"
            },
            "scope": 5528,
            "src": "31763:291:7",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5526,
              "nodeType": "Block",
              "src": "32213:22:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5524,
                    "name": "MAX_UINT64",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3562,
                    "src": "32222:10:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 5523,
                  "id": 5525,
                  "nodeType": "Return",
                  "src": "32215:17:7"
                }
              ]
            },
            "documentation": null,
            "id": 5527,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getMaxPeriodTransitions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5520,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "32179:2:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 5523,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5522,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5527,
                  "src": "32205:6:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 5521,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "32205:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "32204:8:7"
            },
            "scope": 5528,
            "src": "32147:88:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 5529,
        "src": "510:31727:7"
      }
    ],
    "src": "57:32181:7"
  },
  "legacyAST": {
    "absolutePath": "@aragon/apps-finance/contracts/Finance.sol",
    "exportedSymbols": {
      "Finance": [
        5528
      ]
    },
    "id": 5529,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 3493,
        "literals": [
          "solidity",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "57:23:7"
      },
      {
        "absolutePath": "@aragon/os/contracts/apps/AragonApp.sol",
        "file": "@aragon/os/contracts/apps/AragonApp.sol",
        "id": 3494,
        "nodeType": "ImportDirective",
        "scope": 5529,
        "sourceUnit": 10490,
        "src": "82:49:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/EtherTokenConstant.sol",
        "file": "@aragon/os/contracts/common/EtherTokenConstant.sol",
        "id": 3495,
        "nodeType": "ImportDirective",
        "scope": 5529,
        "sourceUnit": 10663,
        "src": "132:60:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/IsContract.sol",
        "file": "@aragon/os/contracts/common/IsContract.sol",
        "id": 3496,
        "nodeType": "ImportDirective",
        "scope": 5529,
        "sourceUnit": 10839,
        "src": "193:52:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/SafeERC20.sol",
        "file": "@aragon/os/contracts/common/SafeERC20.sol",
        "id": 3497,
        "nodeType": "ImportDirective",
        "scope": 5529,
        "sourceUnit": 11154,
        "src": "246:51:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/lib/token/ERC20.sol",
        "file": "@aragon/os/contracts/lib/token/ERC20.sol",
        "id": 3498,
        "nodeType": "ImportDirective",
        "scope": 5529,
        "sourceUnit": 14295,
        "src": "299:50:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/lib/math/SafeMath.sol",
        "file": "@aragon/os/contracts/lib/math/SafeMath.sol",
        "id": 3499,
        "nodeType": "ImportDirective",
        "scope": 5529,
        "sourceUnit": 14065,
        "src": "350:52:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/lib/math/SafeMath64.sol",
        "file": "@aragon/os/contracts/lib/math/SafeMath64.sol",
        "id": 3500,
        "nodeType": "ImportDirective",
        "scope": 5529,
        "sourceUnit": 14207,
        "src": "403:54:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/apps-vault/contracts/Vault.sol",
        "file": "@aragon/apps-vault/contracts/Vault.sol",
        "id": 3501,
        "nodeType": "ImportDirective",
        "scope": 5529,
        "sourceUnit": 7858,
        "src": "459:48:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 3502,
              "name": "EtherTokenConstant",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10662,
              "src": "530:18:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_EtherTokenConstant_$10662",
                "typeString": "contract EtherTokenConstant"
              }
            },
            "id": 3503,
            "nodeType": "InheritanceSpecifier",
            "src": "530:18:7"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 3504,
              "name": "IsContract",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10838,
              "src": "550:10:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IsContract_$10838",
                "typeString": "contract IsContract"
              }
            },
            "id": 3505,
            "nodeType": "InheritanceSpecifier",
            "src": "550:10:7"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 3506,
              "name": "AragonApp",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10489,
              "src": "562:9:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AragonApp_$10489",
                "typeString": "contract AragonApp"
              }
            },
            "id": 3507,
            "nodeType": "InheritanceSpecifier",
            "src": "562:9:7"
          }
        ],
        "contractDependencies": [
          9577,
          10365,
          10489,
          10502,
          10662,
          10712,
          10810,
          10838,
          10871,
          10908,
          11200,
          11422,
          11823,
          11850,
          13114
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 5528,
        "linearizedBaseContracts": [
          5528,
          10489,
          9577,
          11823,
          13114,
          11850,
          10908,
          11422,
          10838,
          10662,
          10712,
          10502,
          10871,
          10810,
          11200,
          10365
        ],
        "name": "Finance",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 3510,
            "libraryName": {
              "contractScope": null,
              "id": 3508,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 14064,
              "src": "584:8:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$14064",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "578:27:7",
            "typeName": {
              "id": 3509,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "597:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 3513,
            "libraryName": {
              "contractScope": null,
              "id": 3511,
              "name": "SafeMath64",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 14206,
              "src": "616:10:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath64_$14206",
                "typeString": "library SafeMath64"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "610:28:7",
            "typeName": {
              "id": 3512,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "631:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            }
          },
          {
            "id": 3516,
            "libraryName": {
              "contractScope": null,
              "id": 3514,
              "name": "SafeERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 11153,
              "src": "649:9:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeERC20_$11153",
                "typeString": "library SafeERC20"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "643:26:7",
            "typeName": {
              "contractScope": null,
              "id": 3515,
              "name": "ERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 14294,
              "src": "663:5:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20_$14294",
                "typeString": "contract ERC20"
              }
            }
          },
          {
            "constant": true,
            "id": 3521,
            "name": "CREATE_PAYMENTS_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "675:80:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 3517,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "675:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "4352454154455f5041594d454e54535f524f4c45",
                  "id": 3519,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "732:22:7",
                  "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": 3518,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 15147,
                "src": "722:9:7",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                  "typeString": "function () pure returns (bytes32)"
                }
              },
              "id": 3520,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "722:33:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3526,
            "name": "CHANGE_PERIOD_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "761:76:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 3522,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "761:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "4348414e47455f504552494f445f524f4c45",
                  "id": 3524,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "816:20:7",
                  "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": 3523,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 15147,
                "src": "806:9:7",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                  "typeString": "function () pure returns (bytes32)"
                }
              },
              "id": 3525,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "806:31:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3531,
            "name": "CHANGE_BUDGETS_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "843:78:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 3527,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "843:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "4348414e47455f425544474554535f524f4c45",
                  "id": 3529,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "899:21:7",
                  "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": 3528,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 15147,
                "src": "889:9:7",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                  "typeString": "function () pure returns (bytes32)"
                }
              },
              "id": 3530,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "889:32:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3536,
            "name": "EXECUTE_PAYMENTS_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "927:82:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 3532,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "927:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "455845435554455f5041594d454e54535f524f4c45",
                  "id": 3534,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "985:23:7",
                  "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": 3533,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 15147,
                "src": "975:9:7",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                  "typeString": "function () pure returns (bytes32)"
                }
              },
              "id": 3535,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "975:34:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3541,
            "name": "MANAGE_PAYMENTS_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "1015:80:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 3537,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1015:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "4d414e4147455f5041594d454e54535f524f4c45",
                  "id": 3539,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1072:22:7",
                  "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": 3538,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 15147,
                "src": "1062:9:7",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                  "typeString": "function () pure returns (bytes32)"
                }
              },
              "id": 3540,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1062:33:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3544,
            "name": "NO_SCHEDULED_PAYMENT",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "1102:50:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3542,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1102:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30",
              "id": 3543,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1151:1:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
              },
              "value": "0"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 3547,
            "name": "NO_TRANSACTION",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "1158:44:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3545,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1158:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30",
              "id": 3546,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1201:1:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
              },
              "value": "0"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 3550,
            "name": "MAX_SCHEDULED_PAYMENTS_PER_TX",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "1208:60:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3548,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1208:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3230",
              "id": 3549,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1266:2:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_20_by_1",
                "typeString": "int_const 20"
              },
              "value": "20"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 3556,
            "name": "MAX_UINT256",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "1274:51:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3551,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1274:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "id": 3554,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "nodeType": "UnaryOperation",
                  "operator": "-",
                  "prefix": true,
                  "src": "1322:2:7",
                  "subExpression": {
                    "argumentTypes": null,
                    "hexValue": "31",
                    "id": 3553,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1323:1:7",
                    "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": 3552,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1314:7:7",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_uint256_$",
                  "typeString": "type(uint256)"
                },
                "typeName": "uint256"
              },
              "id": 3555,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1314:11:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 3562,
            "name": "MAX_UINT64",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "1331:48:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 3557,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "1331:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "id": 3560,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "nodeType": "UnaryOperation",
                  "operator": "-",
                  "prefix": true,
                  "src": "1376:2:7",
                  "subExpression": {
                    "argumentTypes": null,
                    "hexValue": "31",
                    "id": 3559,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1377:1:7",
                    "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": 3558,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1369:6:7",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_uint64_$",
                  "typeString": "type(uint64)"
                },
                "typeName": "uint64"
              },
              "id": 3561,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1369:10:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 3567,
            "name": "MINIMUM_PERIOD",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "1385:56:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 3563,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "1385:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "31",
                  "id": 3565,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1434:6:7",
                  "subdenomination": "days",
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_86400_by_1",
                    "typeString": "int_const 86400"
                  },
                  "value": "1"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_rational_86400_by_1",
                    "typeString": "int_const 86400"
                  }
                ],
                "id": 3564,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1427:6:7",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_uint64_$",
                  "typeString": "type(uint64)"
                },
                "typeName": "uint64"
              },
              "id": 3566,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1427:14:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 3570,
            "name": "ERROR_COMPLETE_TRANSITION",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "1448:81:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3568,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1448:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f434f4d504c4554455f5452414e534954494f4e",
              "id": 3569,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1500:29:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_22ec6e0c3735a2fda2fb445836cfebb8537041a148155716f86965a81552ecaf",
                "typeString": "literal_string \"FINANCE_COMPLETE_TRANSITION\""
              },
              "value": "FINANCE_COMPLETE_TRANSITION"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3573,
            "name": "ERROR_NO_SCHEDULED_PAYMENT",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "1535:83:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3571,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1535:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f4e4f5f5343484544554c45445f5041594d454e54",
              "id": 3572,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1588:30:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_48242c9965a66807015fe42e1feb4465079fd12bf04a3a1b24570d2df6515b81",
                "typeString": "literal_string \"FINANCE_NO_SCHEDULED_PAYMENT\""
              },
              "value": "FINANCE_NO_SCHEDULED_PAYMENT"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3576,
            "name": "ERROR_NO_TRANSACTION",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "1624:71:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3574,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1624:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f4e4f5f5452414e53414354494f4e",
              "id": 3575,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1671:24:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_b1e87dfa63a7fa93fbf96eab40f01b7e057a0ce0eb12da8a36d7a9b3584faaea",
                "typeString": "literal_string \"FINANCE_NO_TRANSACTION\""
              },
              "value": "FINANCE_NO_TRANSACTION"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3579,
            "name": "ERROR_NO_PERIOD",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "1701:61:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3577,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1701:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f4e4f5f504552494f44",
              "id": 3578,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1743:19:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_d1c462d5c2112fe4829843683286df794144b893d493bfb3a201b032dcb0798d",
                "typeString": "literal_string \"FINANCE_NO_PERIOD\""
              },
              "value": "FINANCE_NO_PERIOD"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3582,
            "name": "ERROR_VAULT_NOT_CONTRACT",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "1768:79:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3580,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1768:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f5641554c545f4e4f545f434f4e5452414354",
              "id": 3581,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1819:28:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_4f6ce1beb4b1acc923ed553912415389acce4c55b09f8dc923ab624929c3ac7c",
                "typeString": "literal_string \"FINANCE_VAULT_NOT_CONTRACT\""
              },
              "value": "FINANCE_VAULT_NOT_CONTRACT"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3585,
            "name": "ERROR_SET_PERIOD_TOO_SHORT",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "1853:83:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3583,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1853:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f5345545f504552494f445f544f4f5f53484f5254",
              "id": 3584,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1906:30:7",
              "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": 3588,
            "name": "ERROR_NEW_PAYMENT_AMOUNT_ZERO",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "1942:89:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3586,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1942:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f4e45575f5041594d454e545f414d4f554e545f5a45524f",
              "id": 3587,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1998:33:7",
              "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": 3591,
            "name": "ERROR_NEW_PAYMENT_INTERVAL_ZERO",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "2037:91:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3589,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2037:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f4e45575f5041594d454e545f494e5452564c5f5a45524f",
              "id": 3590,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2095:33:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_1f5cef8d0dc37cb952f9621441971350ae577676082774725adafac3a98c5fd6",
                "typeString": "literal_string \"FINANCE_NEW_PAYMENT_INTRVL_ZERO\""
              },
              "value": "FINANCE_NEW_PAYMENT_INTRVL_ZERO"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3594,
            "name": "ERROR_NEW_PAYMENT_EXECS_ZERO",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "2134:87:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3592,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2134:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f4e45575f5041594d454e545f45584543535f5a45524f",
              "id": 3593,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2189:32:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_07ec39532a2245c10fe0f0814a1968914bbb9bf138d1bf6515c0eb7f2367194f",
                "typeString": "literal_string \"FINANCE_NEW_PAYMENT_EXECS_ZERO\""
              },
              "value": "FINANCE_NEW_PAYMENT_EXECS_ZERO"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3597,
            "name": "ERROR_NEW_PAYMENT_IMMEDIATE",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "2227:85:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3595,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2227:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f4e45575f5041594d454e545f494d4d454449415445",
              "id": 3596,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2281:31:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_f0500f0ff3ac1dd20be6d9e9ff72effb99285a08e7b31d52820c22d20213d716",
                "typeString": "literal_string \"FINANCE_NEW_PAYMENT_IMMEDIATE\""
              },
              "value": "FINANCE_NEW_PAYMENT_IMMEDIATE"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3600,
            "name": "ERROR_RECOVER_AMOUNT_ZERO",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "2318:81:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3598,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2318:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f5245434f5645525f414d4f554e545f5a45524f",
              "id": 3599,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2370:29:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_887cdae74ca676db86e5ff884d1ed487026a75a5ff2e355b97032d51731277ea",
                "typeString": "literal_string \"FINANCE_RECOVER_AMOUNT_ZERO\""
              },
              "value": "FINANCE_RECOVER_AMOUNT_ZERO"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3603,
            "name": "ERROR_DEPOSIT_AMOUNT_ZERO",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "2405:81:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3601,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2405:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f4445504f5349545f414d4f554e545f5a45524f",
              "id": 3602,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2457:29:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_6610a3bc46bba63f677fa7f08e3ad8e90ebdf9830290f8fc7b863aca074b39e4",
                "typeString": "literal_string \"FINANCE_DEPOSIT_AMOUNT_ZERO\""
              },
              "value": "FINANCE_DEPOSIT_AMOUNT_ZERO"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3606,
            "name": "ERROR_ETH_VALUE_MISMATCH",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "2492:79:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3604,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2492:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f4554485f56414c55455f4d49534d41544348",
              "id": 3605,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2543:28:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_1ccc088cc9b25ca98929821b5e593c6823fe3548d9e37efa7850333b79341ca5",
                "typeString": "literal_string \"FINANCE_ETH_VALUE_MISMATCH\""
              },
              "value": "FINANCE_ETH_VALUE_MISMATCH"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3609,
            "name": "ERROR_BUDGET",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "2577:55:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3607,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2577:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f425544474554",
              "id": 3608,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2616:16:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_a3b0fd663c3f091445c9d2b484685b6976e216ee84e292e1bc26c5f6eb18212d",
                "typeString": "literal_string \"FINANCE_BUDGET\""
              },
              "value": "FINANCE_BUDGET"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3612,
            "name": "ERROR_EXECUTE_PAYMENT_NUM",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "2638:81:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3610,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2638:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f455845435554455f5041594d454e545f4e554d",
              "id": 3611,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2690:29:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_49476d78bf03e8ab7a07c0a096caacc3405517496bf2509dbf38f14686eec113",
                "typeString": "literal_string \"FINANCE_EXECUTE_PAYMENT_NUM\""
              },
              "value": "FINANCE_EXECUTE_PAYMENT_NUM"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3615,
            "name": "ERROR_EXECUTE_PAYMENT_TIME",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "2725:83:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3613,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2725:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f455845435554455f5041594d454e545f54494d45",
              "id": 3614,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2778:30:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_c1a736e94274378373cef5c66f5657bcfa50659c24581a0a4bfa668c04678317",
                "typeString": "literal_string \"FINANCE_EXECUTE_PAYMENT_TIME\""
              },
              "value": "FINANCE_EXECUTE_PAYMENT_TIME"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3618,
            "name": "ERROR_PAYMENT_RECEIVER",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "2814:75:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3616,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2814:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f5041594d454e545f5245434549564552",
              "id": 3617,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2863:26:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_e67182ceb919bc28f0bcb16889270f6f64025682424ceb6843d8119099dbeace",
                "typeString": "literal_string \"FINANCE_PAYMENT_RECEIVER\""
              },
              "value": "FINANCE_PAYMENT_RECEIVER"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3621,
            "name": "ERROR_TOKEN_TRANSFER_FROM_REVERTED",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "2895:95:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3619,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2895:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f544b4e5f5452414e534645525f46524f4d5f524556455254",
              "id": 3620,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2956:34:7",
              "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": 3624,
            "name": "ERROR_TOKEN_APPROVE_FAILED",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "2996:81:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3622,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2996:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f544b4e5f415050524f56455f4641494c4544",
              "id": 3623,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3049:28:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_d77d3db2060bb072bb140e0fdca0660dd25613d6b3fabbcc609bc10d926b1f2c",
                "typeString": "literal_string \"FINANCE_TKN_APPROVE_FAILED\""
              },
              "value": "FINANCE_TKN_APPROVE_FAILED"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3627,
            "name": "ERROR_PAYMENT_INACTIVE",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "3083:75:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3625,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "3083:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f5041594d454e545f494e414354495645",
              "id": 3626,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3132:26:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_fb1c85406dbe021dd2fbe569dc1b5134d310d7a785d47610fefcc3150d54bbd0",
                "typeString": "literal_string \"FINANCE_PAYMENT_INACTIVE\""
              },
              "value": "FINANCE_PAYMENT_INACTIVE"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3630,
            "name": "ERROR_REMAINING_BUDGET",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "3164:75:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3628,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "3164:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "46494e414e43455f52454d41494e494e475f425544474554",
              "id": 3629,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3213:26:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_2e378b1bab04e94af1aa86ea6fa9f5c8d9dee3ed82f1b4706d4b3e19e606de9c",
                "typeString": "literal_string \"FINANCE_REMAINING_BUDGET\""
              },
              "value": "FINANCE_REMAINING_BUDGET"
            },
            "visibility": "private"
          },
          {
            "canonicalName": "Finance.ScheduledPayment",
            "id": 3649,
            "members": [
              {
                "constant": false,
                "id": 3632,
                "name": "token",
                "nodeType": "VariableDeclaration",
                "scope": 3649,
                "src": "3315:13:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 3631,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "3315:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3634,
                "name": "receiver",
                "nodeType": "VariableDeclaration",
                "scope": 3649,
                "src": "3338:16:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 3633,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "3338:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3636,
                "name": "createdBy",
                "nodeType": "VariableDeclaration",
                "scope": 3649,
                "src": "3364:17:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 3635,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "3364:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3638,
                "name": "inactive",
                "nodeType": "VariableDeclaration",
                "scope": 3649,
                "src": "3391:13:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 3637,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "3391:4:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3640,
                "name": "amount",
                "nodeType": "VariableDeclaration",
                "scope": 3649,
                "src": "3414:14:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3639,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3414:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3642,
                "name": "initialPaymentTime",
                "nodeType": "VariableDeclaration",
                "scope": 3649,
                "src": "3438:25:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 3641,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3438:6:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3644,
                "name": "interval",
                "nodeType": "VariableDeclaration",
                "scope": 3649,
                "src": "3473:15:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 3643,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3473:6:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3646,
                "name": "maxExecutions",
                "nodeType": "VariableDeclaration",
                "scope": 3649,
                "src": "3498:20:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 3645,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3498:6:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3648,
                "name": "executions",
                "nodeType": "VariableDeclaration",
                "scope": 3649,
                "src": "3528:17:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 3647,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3528:6:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "ScheduledPayment",
            "nodeType": "StructDefinition",
            "scope": 5528,
            "src": "3281:271:7",
            "visibility": "public"
          },
          {
            "canonicalName": "Finance.Transaction",
            "id": 3666,
            "members": [
              {
                "constant": false,
                "id": 3651,
                "name": "token",
                "nodeType": "VariableDeclaration",
                "scope": 3666,
                "src": "3622:13:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 3650,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "3622:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3653,
                "name": "entity",
                "nodeType": "VariableDeclaration",
                "scope": 3666,
                "src": "3645:14:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 3652,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "3645:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3655,
                "name": "isIncoming",
                "nodeType": "VariableDeclaration",
                "scope": 3666,
                "src": "3669:15:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 3654,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "3669:4:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3657,
                "name": "amount",
                "nodeType": "VariableDeclaration",
                "scope": 3666,
                "src": "3694:14:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3656,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3694:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3659,
                "name": "paymentId",
                "nodeType": "VariableDeclaration",
                "scope": 3666,
                "src": "3718:17:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3658,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3718:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3661,
                "name": "paymentExecutionNumber",
                "nodeType": "VariableDeclaration",
                "scope": 3666,
                "src": "3745:29:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 3660,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3745:6:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3663,
                "name": "date",
                "nodeType": "VariableDeclaration",
                "scope": 3666,
                "src": "3784:11:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 3662,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3784:6:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3665,
                "name": "periodId",
                "nodeType": "VariableDeclaration",
                "scope": 3666,
                "src": "3805:15:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 3664,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3805:6:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Transaction",
            "nodeType": "StructDefinition",
            "scope": 5528,
            "src": "3593:234:7",
            "visibility": "public"
          },
          {
            "canonicalName": "Finance.TokenStatement",
            "id": 3671,
            "members": [
              {
                "constant": false,
                "id": 3668,
                "name": "expenses",
                "nodeType": "VariableDeclaration",
                "scope": 3671,
                "src": "3865:16:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3667,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3865:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3670,
                "name": "income",
                "nodeType": "VariableDeclaration",
                "scope": 3671,
                "src": "3891:14:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3669,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3891:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "TokenStatement",
            "nodeType": "StructDefinition",
            "scope": 5528,
            "src": "3833:79:7",
            "visibility": "public"
          },
          {
            "canonicalName": "Finance.Period",
            "id": 3684,
            "members": [
              {
                "constant": false,
                "id": 3673,
                "name": "startTime",
                "nodeType": "VariableDeclaration",
                "scope": 3684,
                "src": "3942:16:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 3672,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3942:6:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3675,
                "name": "endTime",
                "nodeType": "VariableDeclaration",
                "scope": 3684,
                "src": "3968:14:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 3674,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "3968:6:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3677,
                "name": "firstTransactionId",
                "nodeType": "VariableDeclaration",
                "scope": 3684,
                "src": "3992:26:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3676,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3992:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3679,
                "name": "lastTransactionId",
                "nodeType": "VariableDeclaration",
                "scope": 3684,
                "src": "4028:25:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3678,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "4028:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3683,
                "name": "tokenStatement",
                "nodeType": "VariableDeclaration",
                "scope": 3684,
                "src": "4063:50:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TokenStatement_$3671_storage_$",
                  "typeString": "mapping(address => struct Finance.TokenStatement)"
                },
                "typeName": {
                  "id": 3682,
                  "keyType": {
                    "id": 3680,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4072:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "4063:35:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TokenStatement_$3671_storage_$",
                    "typeString": "mapping(address => struct Finance.TokenStatement)"
                  },
                  "valueType": {
                    "contractScope": null,
                    "id": 3681,
                    "name": "TokenStatement",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3671,
                    "src": "4083:14:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TokenStatement_$3671_storage_ptr",
                      "typeString": "struct Finance.TokenStatement"
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Period",
            "nodeType": "StructDefinition",
            "scope": 5528,
            "src": "3918:202:7",
            "visibility": "public"
          },
          {
            "canonicalName": "Finance.Settings",
            "id": 3695,
            "members": [
              {
                "constant": false,
                "id": 3686,
                "name": "periodDuration",
                "nodeType": "VariableDeclaration",
                "scope": 3695,
                "src": "4152:21:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 3685,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "4152:6:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3690,
                "name": "budgets",
                "nodeType": "VariableDeclaration",
                "scope": 3695,
                "src": "4183:36:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                  "typeString": "mapping(address => uint256)"
                },
                "typeName": {
                  "id": 3689,
                  "keyType": {
                    "id": 3687,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4192:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "4183:28:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "valueType": {
                    "id": 3688,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4203:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3694,
                "name": "hasBudget",
                "nodeType": "VariableDeclaration",
                "scope": 3695,
                "src": "4229:35:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                  "typeString": "mapping(address => bool)"
                },
                "typeName": {
                  "id": 3693,
                  "keyType": {
                    "id": 3691,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4238:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "4229:25:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                    "typeString": "mapping(address => bool)"
                  },
                  "valueType": {
                    "id": 3692,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4249:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Settings",
            "nodeType": "StructDefinition",
            "scope": 5528,
            "src": "4126:145:7",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3697,
            "name": "vault",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "4277:18:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Vault_$7857",
              "typeString": "contract Vault"
            },
            "typeName": {
              "contractScope": null,
              "id": 3696,
              "name": "Vault",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 7857,
              "src": "4277:5:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Vault_$7857",
                "typeString": "contract Vault"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3699,
            "name": "settings",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "4301:26:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Settings_$3695_storage",
              "typeString": "struct Finance.Settings"
            },
            "typeName": {
              "contractScope": null,
              "id": 3698,
              "name": "Settings",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3695,
              "src": "4301:8:7",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Settings_$3695_storage_ptr",
                "typeString": "struct Finance.Settings"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 3703,
            "name": "scheduledPayments",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "4423:64:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ScheduledPayment_$3649_storage_$",
              "typeString": "mapping(uint256 => struct Finance.ScheduledPayment)"
            },
            "typeName": {
              "id": 3702,
              "keyType": {
                "id": 3700,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "4432:7:7",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "4423:37:7",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ScheduledPayment_$3649_storage_$",
                "typeString": "mapping(uint256 => struct Finance.ScheduledPayment)"
              },
              "valueType": {
                "contractScope": null,
                "id": 3701,
                "name": "ScheduledPayment",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 3649,
                "src": "4443:16:7",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                  "typeString": "struct Finance.ScheduledPayment"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 3705,
            "name": "paymentsNextIndex",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "4634:32:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3704,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "4634:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3709,
            "name": "transactions",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "4673:54:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Transaction_$3666_storage_$",
              "typeString": "mapping(uint256 => struct Finance.Transaction)"
            },
            "typeName": {
              "id": 3708,
              "keyType": {
                "id": 3706,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "4682:7:7",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "4673:32:7",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Transaction_$3666_storage_$",
                "typeString": "mapping(uint256 => struct Finance.Transaction)"
              },
              "valueType": {
                "contractScope": null,
                "id": 3707,
                "name": "Transaction",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 3666,
                "src": "4693:11:7",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                  "typeString": "struct Finance.Transaction"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 3711,
            "name": "transactionsNextIndex",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "4733:36:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3710,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "4733:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3715,
            "name": "periods",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "4776:43:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$3684_storage_$",
              "typeString": "mapping(uint64 => struct Finance.Period)"
            },
            "typeName": {
              "id": 3714,
              "keyType": {
                "id": 3712,
                "name": "uint64",
                "nodeType": "ElementaryTypeName",
                "src": "4785:6:7",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                }
              },
              "nodeType": "Mapping",
              "src": "4776:26:7",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$3684_storage_$",
                "typeString": "mapping(uint64 => struct Finance.Period)"
              },
              "valueType": {
                "contractScope": null,
                "id": 3713,
                "name": "Period",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 3684,
                "src": "4795:6:7",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                  "typeString": "struct Finance.Period"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 3717,
            "name": "periodsLength",
            "nodeType": "VariableDeclaration",
            "scope": 5528,
            "src": "4825:27:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 3716,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "4825:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3725,
            "name": "NewPeriod",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3724,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3719,
                  "indexed": true,
                  "name": "periodId",
                  "nodeType": "VariableDeclaration",
                  "scope": 3725,
                  "src": "4875:23:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3718,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "4875:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3721,
                  "indexed": false,
                  "name": "periodStarts",
                  "nodeType": "VariableDeclaration",
                  "scope": 3725,
                  "src": "4900:19:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3720,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "4900:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3723,
                  "indexed": false,
                  "name": "periodEnds",
                  "nodeType": "VariableDeclaration",
                  "scope": 3725,
                  "src": "4921:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3722,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "4921:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4874:65:7"
            },
            "src": "4859:81:7"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3733,
            "name": "SetBudget",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3732,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3727,
                  "indexed": true,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 3733,
                  "src": "4961:21:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3726,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4961:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3729,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 3733,
                  "src": "4984:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3728,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4984:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3731,
                  "indexed": false,
                  "name": "hasBudget",
                  "nodeType": "VariableDeclaration",
                  "scope": 3733,
                  "src": "5000:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3730,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5000:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4960:55:7"
            },
            "src": "4945:71:7"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3743,
            "name": "NewPayment",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3742,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3735,
                  "indexed": true,
                  "name": "paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 3743,
                  "src": "5038:25:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3734,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5038:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3737,
                  "indexed": true,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 3743,
                  "src": "5065:25:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3736,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5065:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3739,
                  "indexed": false,
                  "name": "maxExecutions",
                  "nodeType": "VariableDeclaration",
                  "scope": 3743,
                  "src": "5092:20:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3738,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "5092:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3741,
                  "indexed": false,
                  "name": "reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 3743,
                  "src": "5114:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3740,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5114:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5037:94:7"
            },
            "src": "5021:111:7"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3755,
            "name": "NewTransaction",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3754,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3745,
                  "indexed": true,
                  "name": "transactionId",
                  "nodeType": "VariableDeclaration",
                  "scope": 3755,
                  "src": "5158:29:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3744,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5158:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3747,
                  "indexed": false,
                  "name": "incoming",
                  "nodeType": "VariableDeclaration",
                  "scope": 3755,
                  "src": "5189:13:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3746,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5189:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3749,
                  "indexed": true,
                  "name": "entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 3755,
                  "src": "5204:22:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3748,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5204:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3751,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 3755,
                  "src": "5228:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3750,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5228:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3753,
                  "indexed": false,
                  "name": "reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 3755,
                  "src": "5244:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3752,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5244:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5157:104:7"
            },
            "src": "5137:125:7"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3761,
            "name": "ChangePaymentState",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3760,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3757,
                  "indexed": true,
                  "name": "paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 3761,
                  "src": "5292:25:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3756,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5292:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3759,
                  "indexed": false,
                  "name": "active",
                  "nodeType": "VariableDeclaration",
                  "scope": 3761,
                  "src": "5319:11:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3758,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5319:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5291:40:7"
            },
            "src": "5267:65:7"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3765,
            "name": "ChangePeriodDuration",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3764,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3763,
                  "indexed": false,
                  "name": "newDuration",
                  "nodeType": "VariableDeclaration",
                  "scope": 3765,
                  "src": "5364:18:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3762,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "5364:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5363:20:7"
            },
            "src": "5337:47:7"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3769,
            "name": "PaymentFailure",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3768,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3767,
                  "indexed": false,
                  "name": "paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 3769,
                  "src": "5410:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3766,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5410:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5409:19:7"
            },
            "src": "5389:40:7"
          },
          {
            "body": {
              "id": 3784,
              "nodeType": "Block",
              "src": "5673:175:7",
              "statements": [
                {
                  "assignments": [
                    3772
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3772,
                      "name": "completeTransition",
                      "nodeType": "VariableDeclaration",
                      "scope": 3785,
                      "src": "5683:23:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 3771,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "5683:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3777,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 3774,
                          "name": "getMaxPeriodTransitions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5527,
                          "src": "5740:23:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                            "typeString": "function () view returns (uint64)"
                          }
                        },
                        "id": 3775,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5740:25:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 3773,
                      "name": "_tryTransitionAccountingPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5331,
                      "src": "5709:30:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint64_$returns$_t_bool_$",
                        "typeString": "function (uint64) returns (bool)"
                      }
                    },
                    "id": 3776,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5709:57:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5683:83:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3779,
                        "name": "completeTransition",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3772,
                        "src": "5784:18:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3780,
                        "name": "ERROR_COMPLETE_TRANSITION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3570,
                        "src": "5804:25:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 3778,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "5776:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3781,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5776:54:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3782,
                  "nodeType": "ExpressionStatement",
                  "src": "5776:54:7"
                },
                {
                  "id": 3783,
                  "nodeType": "PlaceholderStatement",
                  "src": "5840:1:7"
                }
              ]
            },
            "documentation": null,
            "id": 3785,
            "name": "transitionsPeriod",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 3770,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5673:0:7"
            },
            "src": "5646:202:7",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3801,
              "nodeType": "Block",
              "src": "5906:113:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 3796,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3792,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 3790,
                            "name": "_paymentId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3787,
                            "src": "5924:10:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 3791,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5937:1:7",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "5924:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3795,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 3793,
                            "name": "_paymentId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3787,
                            "src": "5942:10:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 3794,
                            "name": "paymentsNextIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3705,
                            "src": "5955:17:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5942:30:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "5924:48:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3797,
                        "name": "ERROR_NO_SCHEDULED_PAYMENT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3573,
                        "src": "5974:26:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 3789,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "5916:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3798,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5916:85:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3799,
                  "nodeType": "ExpressionStatement",
                  "src": "5916:85:7"
                },
                {
                  "id": 3800,
                  "nodeType": "PlaceholderStatement",
                  "src": "6011:1:7"
                }
              ]
            },
            "documentation": null,
            "id": 3802,
            "name": "scheduledPaymentExists",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 3788,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3787,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 3802,
                  "src": "5886:18:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3786,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5886:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5885:20:7"
            },
            "src": "5854:165:7",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3818,
              "nodeType": "Block",
              "src": "6076:119:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 3813,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3809,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 3807,
                            "name": "_transactionId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3804,
                            "src": "6094:14:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 3808,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6111:1:7",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "6094:18:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3812,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 3810,
                            "name": "_transactionId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3804,
                            "src": "6116:14:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 3811,
                            "name": "transactionsNextIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3711,
                            "src": "6133:21:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6116:38:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "6094:60:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3814,
                        "name": "ERROR_NO_TRANSACTION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3576,
                        "src": "6156:20:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 3806,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "6086:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3815,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6086:91:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3816,
                  "nodeType": "ExpressionStatement",
                  "src": "6086:91:7"
                },
                {
                  "id": 3817,
                  "nodeType": "PlaceholderStatement",
                  "src": "6187:1:7"
                }
              ]
            },
            "documentation": null,
            "id": 3819,
            "name": "transactionExists",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 3805,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3804,
                  "name": "_transactionId",
                  "nodeType": "VariableDeclaration",
                  "scope": 3819,
                  "src": "6052:22:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3803,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6052:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6051:24:7"
            },
            "src": "6025:170:7",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3831,
              "nodeType": "Block",
              "src": "6241:79:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 3826,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3824,
                          "name": "_periodId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3821,
                          "src": "6259:9:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3825,
                          "name": "periodsLength",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3717,
                          "src": "6271:13:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "6259:25:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3827,
                        "name": "ERROR_NO_PERIOD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3579,
                        "src": "6286:15:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 3823,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "6251:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3828,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6251:51:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3829,
                  "nodeType": "ExpressionStatement",
                  "src": "6251:51:7"
                },
                {
                  "id": 3830,
                  "nodeType": "PlaceholderStatement",
                  "src": "6312:1:7"
                }
              ]
            },
            "documentation": null,
            "id": 3832,
            "name": "periodExists",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 3822,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3821,
                  "name": "_periodId",
                  "nodeType": "VariableDeclaration",
                  "scope": 3832,
                  "src": "6223:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3820,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "6223:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6222:18:7"
            },
            "src": "6201:119:7",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3857,
              "nodeType": "Block",
              "src": "6557:221:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3843,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3840,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15153,
                            "src": "6575:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 3841,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "6575:9:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 3842,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6587:1:7",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "6575:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3844,
                        "name": "ERROR_DEPOSIT_AMOUNT_ZERO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3603,
                        "src": "6590:25:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 3839,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "6567:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3845,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6567:49:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3846,
                  "nodeType": "ExpressionStatement",
                  "src": "6567:49:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3848,
                        "name": "ETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10661,
                        "src": "6648:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3849,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15153,
                          "src": "6665:3:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3850,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6665:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4574686572207472616e7366657220746f2046696e616e636520617070",
                        "id": 3851,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6688:31:7",
                        "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": 3852,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15153,
                          "src": "6733:3:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3853,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6733:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "74727565",
                        "id": 3854,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6757:4:7",
                        "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": 3847,
                      "name": "_deposit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4866,
                      "src": "6626:8:7",
                      "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": 3855,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6626:145:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3856,
                  "nodeType": "ExpressionStatement",
                  "src": "6626:145:7"
                }
              ]
            },
            "documentation": "@notice Deposit ETH to the Vault, to avoid locking them in this Finance app forever\n@dev Send ETH to Vault. Send all the available balance.",
            "id": 3858,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 3835,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3834,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10752,
                  "src": "6525:13:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6525:13:7"
              },
              {
                "arguments": null,
                "id": 3837,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3836,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3785,
                  "src": "6539:17:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6539:17:7"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3833,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6505:2:7"
            },
            "payable": true,
            "returnParameters": {
              "id": 3838,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6557:0:7"
            },
            "scope": 5528,
            "src": "6496:282:7",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3914,
              "nodeType": "Block",
              "src": "7133:670:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 3867,
                      "name": "initialized",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10795,
                      "src": "7143:11:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 3868,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7143:13:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3869,
                  "nodeType": "ExpressionStatement",
                  "src": "7143:13:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3872,
                            "name": "_vault",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3860,
                            "src": "7186:6:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Vault_$7857",
                              "typeString": "contract Vault"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Vault_$7857",
                              "typeString": "contract Vault"
                            }
                          ],
                          "id": 3871,
                          "name": "isContract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10837,
                          "src": "7175:10:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 3873,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7175:18:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3874,
                        "name": "ERROR_VAULT_NOT_CONTRACT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3582,
                        "src": "7195:24:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 3870,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "7167:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3875,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7167:53:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3876,
                  "nodeType": "ExpressionStatement",
                  "src": "7167:53:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3879,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3877,
                      "name": "vault",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3697,
                      "src": "7230:5:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Vault_$7857",
                        "typeString": "contract Vault"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3878,
                      "name": "_vault",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3860,
                      "src": "7238:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Vault_$7857",
                        "typeString": "contract Vault"
                      }
                    },
                    "src": "7230:14:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Vault_$7857",
                      "typeString": "contract Vault"
                    }
                  },
                  "id": 3880,
                  "nodeType": "ExpressionStatement",
                  "src": "7230:14:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 3884,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3882,
                          "name": "_periodDuration",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3862,
                          "src": "7263:15:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3883,
                          "name": "MINIMUM_PERIOD",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3567,
                          "src": "7282:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "7263:33:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3885,
                        "name": "ERROR_SET_PERIOD_TOO_SHORT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3585,
                        "src": "7298:26:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 3881,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "7255:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3886,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7255:70:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3887,
                  "nodeType": "ExpressionStatement",
                  "src": "7255:70:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3892,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3888,
                        "name": "settings",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3699,
                        "src": "7335:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Settings_$3695_storage",
                          "typeString": "struct Finance.Settings storage ref"
                        }
                      },
                      "id": 3890,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "periodDuration",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3686,
                      "src": "7335:23:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3891,
                      "name": "_periodDuration",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3862,
                      "src": "7361:15:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "7335:41:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 3893,
                  "nodeType": "ExpressionStatement",
                  "src": "7335:41:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3899,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 3894,
                          "name": "scheduledPayments",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3703,
                          "src": "7521:17:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ScheduledPayment_$3649_storage_$",
                            "typeString": "mapping(uint256 => struct Finance.ScheduledPayment storage ref)"
                          }
                        },
                        "id": 3896,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 3895,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7539:1:7",
                          "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": "7521:20:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage",
                          "typeString": "struct Finance.ScheduledPayment storage ref"
                        }
                      },
                      "id": 3897,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "inactive",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3638,
                      "src": "7521:29:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 3898,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7553:4:7",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "7521:36:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3900,
                  "nodeType": "ExpressionStatement",
                  "src": "7521:36:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3903,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3901,
                      "name": "paymentsNextIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3705,
                      "src": "7567:17:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 3902,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7587:1:7",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "7567:21:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3904,
                  "nodeType": "ExpressionStatement",
                  "src": "7567:21:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3907,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3905,
                      "name": "transactionsNextIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3711,
                      "src": "7698:21:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 3906,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7722:1:7",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "7698:25:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3908,
                  "nodeType": "ExpressionStatement",
                  "src": "7698:25:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 3910,
                          "name": "getTimestamp64",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11199,
                          "src": "7779:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                            "typeString": "function () view returns (uint64)"
                          }
                        },
                        "id": 3911,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7779:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 3909,
                      "name": "_newPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5103,
                      "src": "7768:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint64_$returns$_t_struct$_Period_$3684_storage_ptr_$",
                        "typeString": "function (uint64) returns (struct Finance.Period storage pointer)"
                      }
                    },
                    "id": 3912,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7768:28:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                      "typeString": "struct Finance.Period storage pointer"
                    }
                  },
                  "id": 3913,
                  "nodeType": "ExpressionStatement",
                  "src": "7768:28:7"
                }
              ]
            },
            "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": 3915,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 3865,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3864,
                  "name": "onlyInit",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10742,
                  "src": "7124:8:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7124:8:7"
              }
            ],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3863,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3860,
                  "name": "_vault",
                  "nodeType": "VariableDeclaration",
                  "scope": 3915,
                  "src": "7077:12:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Vault_$7857",
                    "typeString": "contract Vault"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3859,
                    "name": "Vault",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7857,
                    "src": "7077:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Vault_$7857",
                      "typeString": "contract Vault"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3862,
                  "name": "_periodDuration",
                  "nodeType": "VariableDeclaration",
                  "scope": 3915,
                  "src": "7091:22:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 3861,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "7091:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7076:38:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 3866,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7133:0:7"
            },
            "scope": 5528,
            "src": "7057:746:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3957,
              "nodeType": "Block",
              "src": "8181:402:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3931,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3929,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3919,
                          "src": "8199:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 3930,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8209:1:7",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "8199:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3932,
                        "name": "ERROR_DEPOSIT_AMOUNT_ZERO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3603,
                        "src": "8212:25:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 3928,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "8191:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3933,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8191:47:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3934,
                  "nodeType": "ExpressionStatement",
                  "src": "8191:47:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 3937,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3935,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3917,
                      "src": "8252:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 3936,
                      "name": "ETH",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10661,
                      "src": "8262:3:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8252:13:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3947,
                  "nodeType": "IfStatement",
                  "src": "8248:193:7",
                  "trueBody": {
                    "id": 3946,
                    "nodeType": "Block",
                    "src": "8267:174:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3942,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 3939,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 15153,
                                  "src": "8383:3:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 3940,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "value",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "8383:9:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 3941,
                                "name": "_amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3919,
                                "src": "8396:7:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "8383:20:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3943,
                              "name": "ERROR_ETH_VALUE_MISMATCH",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3606,
                              "src": "8405:24:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_string_memory",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 3938,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              15156,
                              15157
                            ],
                            "referencedDeclaration": 15157,
                            "src": "8375:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3944,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8375:55:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3945,
                        "nodeType": "ExpressionStatement",
                        "src": "8375:55:7"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3949,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3917,
                        "src": "8473:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3950,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3919,
                        "src": "8493:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3951,
                        "name": "_reference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3921,
                        "src": "8514:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3952,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15153,
                          "src": "8538:3:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3953,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "8538:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "74727565",
                        "id": 3954,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8562:4:7",
                        "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": 3948,
                      "name": "_deposit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4866,
                      "src": "8451:8:7",
                      "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": 3955,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8451:125:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3956,
                  "nodeType": "ExpressionStatement",
                  "src": "8451:125:7"
                }
              ]
            },
            "documentation": "@notice Deposit `@tokenAmount(_token, _amount)`\n@dev Deposit for approved ERC20 tokens or ETH\n@param _token Address of deposited token\n@param _amount Amount of tokens sent\n@param _reference Reason for payment",
            "id": 3958,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 3924,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3923,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10752,
                  "src": "8149:13:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8149:13:7"
              },
              {
                "arguments": null,
                "id": 3926,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3925,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3785,
                  "src": "8163:17:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8163:17:7"
              }
            ],
            "name": "deposit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3922,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3917,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 3958,
                  "src": "8080:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3916,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8080:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3919,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 3958,
                  "src": "8096:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3918,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8096:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3921,
                  "name": "_reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 3958,
                  "src": "8113:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3920,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "8113:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8079:52:7"
            },
            "payable": true,
            "returnParameters": {
              "id": 3927,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8181:0:7"
            },
            "scope": 5528,
            "src": "8063:520:7",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4001,
              "nodeType": "Block",
              "src": "9851:346:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3988,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3986,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3964,
                          "src": "9869:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 3987,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9879:1:7",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "9869:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3989,
                        "name": "ERROR_NEW_PAYMENT_AMOUNT_ZERO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3588,
                        "src": "9882:29:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 3985,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "9861:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3990,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9861:51:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3991,
                  "nodeType": "ExpressionStatement",
                  "src": "9861:51:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3993,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3960,
                        "src": "9960:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3994,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3962,
                        "src": "9980:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3995,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3964,
                        "src": "10003:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3996,
                        "name": "NO_SCHEDULED_PAYMENT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3544,
                        "src": "10024:20:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 3997,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10109:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "id": 3998,
                        "name": "_reference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3966,
                        "src": "10170:10:7",
                        "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": 3992,
                      "name": "_makePaymentTransaction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5010,
                      "src": "9923:23:7",
                      "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": 3999,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9923:267:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4000,
                  "nodeType": "ExpressionStatement",
                  "src": "9923:267:7"
                }
              ]
            },
            "documentation": "@notice Create a new payment of `@tokenAmount(_token, _amount)` to `_receiver` for '`_reference`'\n@dev Note that this function is protected by the `CREATE_PAYMENTS_ROLE` but uses `MAX_UINT256`\n     as its interval auth parameter (as a sentinel value for \"never repeating\").\n     While this protects against most cases (you typically want to set a baseline requirement\n     for interval time), it does mean users will have to explicitly check for this case when\n     granting a permission that includes a upperbound requirement on the interval time.\n@param _token Address of token for payment\n@param _receiver Address that will receive payment\n@param _amount Tokens that are paid every time the payment is due\n@param _reference String detailing payment reason",
            "id": 4002,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 3969,
                    "name": "CREATE_PAYMENTS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3521,
                    "src": "9724:20:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3971,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3960,
                        "src": "9751:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3972,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3962,
                        "src": "9759:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3973,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3964,
                        "src": "9770:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3974,
                        "name": "MAX_UINT256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3556,
                        "src": "9779:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 3976,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9800:1:7",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            }
                          ],
                          "id": 3975,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "9792:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 3977,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9792:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 3978,
                          "name": "getTimestamp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11188,
                          "src": "9804:12:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 3979,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9804:14:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3970,
                      "name": "_arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5519,
                      "src": "9746:4:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (address,address,uint256,uint256,uint256,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 3980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9746:73:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 3981,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3968,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10428,
                  "src": "9718:5:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9718:102:7"
              },
              {
                "arguments": null,
                "id": 3983,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3982,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3785,
                  "src": "9829:17:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9829:17:7"
              }
            ],
            "name": "newImmediatePayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3967,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3960,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 4002,
                  "src": "9452:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3959,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9452:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3962,
                  "name": "_receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 4002,
                  "src": "9468:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3961,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9468:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3964,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4002,
                  "src": "9487:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3963,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9487:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3966,
                  "name": "_reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 4002,
                  "src": "9504:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3965,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "9504:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9451:71:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 3984,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9851:0:7"
            },
            "scope": 5528,
            "src": "9423:774:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4155,
              "nodeType": "Block",
              "src": "11513:1334:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4043,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4041,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4008,
                          "src": "11531:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 4042,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11541:1:7",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "11531:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4044,
                        "name": "ERROR_NEW_PAYMENT_AMOUNT_ZERO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3588,
                        "src": "11544:29:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4040,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "11523:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4045,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11523:51:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4046,
                  "nodeType": "ExpressionStatement",
                  "src": "11523:51:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 4050,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4048,
                          "name": "_interval",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4012,
                          "src": "11592:9:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 4049,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11604:1:7",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "11592:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4051,
                        "name": "ERROR_NEW_PAYMENT_INTERVAL_ZERO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3591,
                        "src": "11607:31:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4047,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "11584:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4052,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11584:55:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4053,
                  "nodeType": "ExpressionStatement",
                  "src": "11584:55:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 4057,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4055,
                          "name": "_maxExecutions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4014,
                          "src": "11657:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 4056,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11674:1:7",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "11657:18:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4058,
                        "name": "ERROR_NEW_PAYMENT_EXECS_ZERO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3594,
                        "src": "11677:28:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4054,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "11649:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4059,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11649:57:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4060,
                  "nodeType": "ExpressionStatement",
                  "src": "11649:57:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 4073,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4066,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "11831:27:7",
                          "subExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4062,
                                "name": "settings",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3699,
                                "src": "11832:8:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Settings_$3695_storage",
                                  "typeString": "struct Finance.Settings storage ref"
                                }
                              },
                              "id": 4063,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "hasBudget",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3694,
                              "src": "11832:18:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 4065,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 4064,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4004,
                              "src": "11851:6:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "11832:26:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4072,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4067,
                                "name": "settings",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3699,
                                "src": "11862:8:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Settings_$3695_storage",
                                  "typeString": "struct Finance.Settings storage ref"
                                }
                              },
                              "id": 4068,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "budgets",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3690,
                              "src": "11862:16:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 4070,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 4069,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4004,
                              "src": "11879:6:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "11862:24:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 4071,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4008,
                            "src": "11890:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11862:35:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "11831:66:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4074,
                        "name": "ERROR_BUDGET",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3609,
                        "src": "11899:12:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4061,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "11823:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4075,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11823:89:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4076,
                  "nodeType": "ExpressionStatement",
                  "src": "11823:89:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 4079,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4077,
                      "name": "_maxExecutions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4014,
                      "src": "12044:14:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 4078,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "12062:1:7",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "12044:19:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4089,
                  "nodeType": "IfStatement",
                  "src": "12040:126:7",
                  "trueBody": {
                    "id": 4088,
                    "nodeType": "Block",
                    "src": "12065:101:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              },
                              "id": 4084,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 4081,
                                "name": "_initialPaymentTime",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4010,
                                "src": "12087:19:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 4082,
                                  "name": "getTimestamp64",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11199,
                                  "src": "12109:14:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                                    "typeString": "function () view returns (uint64)"
                                  }
                                },
                                "id": 4083,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "12109:16:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              },
                              "src": "12087:38:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4085,
                              "name": "ERROR_NEW_PAYMENT_IMMEDIATE",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3597,
                              "src": "12127:27:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_string_memory",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 4080,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              15156,
                              15157
                            ],
                            "referencedDeclaration": 15157,
                            "src": "12079:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4086,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12079:76:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4087,
                        "nodeType": "ExpressionStatement",
                        "src": "12079:76:7"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4093,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4090,
                      "name": "paymentId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4038,
                      "src": "12176:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4092,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "12188:19:7",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 4091,
                        "name": "paymentsNextIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3705,
                        "src": "12188:17:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12176:31:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4094,
                  "nodeType": "ExpressionStatement",
                  "src": "12176:31:7"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4096,
                        "name": "paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4038,
                        "src": "12233:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4097,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4006,
                        "src": "12244:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4098,
                        "name": "_maxExecutions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4014,
                        "src": "12255:14:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4099,
                        "name": "_reference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4016,
                        "src": "12271:10:7",
                        "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": 4095,
                      "name": "NewPayment",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3743,
                      "src": "12222:10:7",
                      "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": 4100,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12222:60:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4101,
                  "nodeType": "EmitStatement",
                  "src": "12217:65:7"
                },
                {
                  "assignments": [
                    4103
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4103,
                      "name": "payment",
                      "nodeType": "VariableDeclaration",
                      "scope": 4156,
                      "src": "12293:32:7",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                        "typeString": "struct Finance.ScheduledPayment"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 4102,
                        "name": "ScheduledPayment",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3649,
                        "src": "12293:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4107,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 4104,
                      "name": "scheduledPayments",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3703,
                      "src": "12328:17:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ScheduledPayment_$3649_storage_$",
                        "typeString": "mapping(uint256 => struct Finance.ScheduledPayment storage ref)"
                      }
                    },
                    "id": 4106,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 4105,
                      "name": "paymentId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4038,
                      "src": "12346:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "12328:28:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage",
                      "typeString": "struct Finance.ScheduledPayment storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12293:63:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4112,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4108,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4103,
                        "src": "12366:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 4110,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "token",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3632,
                      "src": "12366:13:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4111,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4004,
                      "src": "12382:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "12366:22:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4113,
                  "nodeType": "ExpressionStatement",
                  "src": "12366:22:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4118,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4114,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4103,
                        "src": "12398:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 4116,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "receiver",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3634,
                      "src": "12398:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4117,
                      "name": "_receiver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4006,
                      "src": "12417:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "12398:28:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4119,
                  "nodeType": "ExpressionStatement",
                  "src": "12398:28:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4124,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4120,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4103,
                        "src": "12436:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 4122,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3640,
                      "src": "12436:14:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4123,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4008,
                      "src": "12453:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12436:24:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4125,
                  "nodeType": "ExpressionStatement",
                  "src": "12436:24:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4130,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4126,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4103,
                        "src": "12470:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 4128,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "initialPaymentTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3642,
                      "src": "12470:26:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4129,
                      "name": "_initialPaymentTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4010,
                      "src": "12499:19:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "12470:48:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4131,
                  "nodeType": "ExpressionStatement",
                  "src": "12470:48:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4136,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4132,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4103,
                        "src": "12528:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 4134,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "interval",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3644,
                      "src": "12528:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4135,
                      "name": "_interval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4012,
                      "src": "12547:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "12528:28:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4137,
                  "nodeType": "ExpressionStatement",
                  "src": "12528:28:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4142,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4138,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4103,
                        "src": "12566:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 4140,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "maxExecutions",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3646,
                      "src": "12566:21:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4141,
                      "name": "_maxExecutions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4014,
                      "src": "12590:14:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "12566:38:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4143,
                  "nodeType": "ExpressionStatement",
                  "src": "12566:38:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4149,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4144,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4103,
                        "src": "12614:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 4146,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "createdBy",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3636,
                      "src": "12614:17:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4147,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15153,
                        "src": "12634:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 4148,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "12634:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "12614:30:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4150,
                  "nodeType": "ExpressionStatement",
                  "src": "12614:30:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4152,
                        "name": "paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4038,
                        "src": "12830:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4151,
                      "name": "_executePayment",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4942,
                      "src": "12814:15:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) returns (uint256)"
                      }
                    },
                    "id": 4153,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12814:26:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4154,
                  "nodeType": "ExpressionStatement",
                  "src": "12814:26:7"
                }
              ]
            },
            "documentation": "@notice Create a new payment of `@tokenAmount(_token, _amount)` to `_receiver` for `_reference`, executing `_maxExecutions` times at intervals of `@transformTime(_interval)`\n@dev See `newImmediatePayment()` for limitations on how the interval auth parameter can be used\n@param _token Address of token for payment\n@param _receiver Address that will receive payment\n@param _amount Tokens that are paid 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 _maxExecutions Maximum instances a payment can be executed\n@param _reference String detailing payment reason",
            "id": 4156,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4019,
                    "name": "CREATE_PAYMENTS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3521,
                    "src": "11316:20:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4021,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4004,
                        "src": "11343:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4022,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4006,
                        "src": "11351:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4023,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4008,
                        "src": "11362:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4025,
                            "name": "_interval",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4012,
                            "src": "11379:9:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          ],
                          "id": 4024,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "11371:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 4026,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11371:18:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4028,
                            "name": "_maxExecutions",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4014,
                            "src": "11399:14:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          ],
                          "id": 4027,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "11391:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 4029,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11391:23:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4031,
                            "name": "_initialPaymentTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4010,
                            "src": "11424:19:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          ],
                          "id": 4030,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "11416:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 4032,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11416:28:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4020,
                      "name": "_arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5519,
                      "src": "11338:4:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (address,address,uint256,uint256,uint256,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 4033,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11338:107:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 4034,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4018,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10428,
                  "src": "11310:5:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11310:136:7"
              },
              {
                "arguments": null,
                "id": 4036,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4035,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3785,
                  "src": "11455:17:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11455:17:7"
              }
            ],
            "name": "newScheduledPayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4017,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4004,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 4156,
                  "src": "11010:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4003,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11010:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4006,
                  "name": "_receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 4156,
                  "src": "11034:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4005,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11034:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4008,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4156,
                  "src": "11061:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4007,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11061:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4010,
                  "name": "_initialPaymentTime",
                  "nodeType": "VariableDeclaration",
                  "scope": 4156,
                  "src": "11086:26:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4009,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "11086:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4012,
                  "name": "_interval",
                  "nodeType": "VariableDeclaration",
                  "scope": 4156,
                  "src": "11122:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4011,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "11122:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4014,
                  "name": "_maxExecutions",
                  "nodeType": "VariableDeclaration",
                  "scope": 4156,
                  "src": "11148:21:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4013,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "11148:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4016,
                  "name": "_reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 4156,
                  "src": "11179:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 4015,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "11179:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11000:202:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4039,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4038,
                  "name": "paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4156,
                  "src": "11490:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4037,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11490:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11489:19:7"
            },
            "scope": 5528,
            "src": "10972:1875:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4192,
              "nodeType": "Block",
              "src": "13249:190:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 4178,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4176,
                          "name": "_periodDuration",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4158,
                          "src": "13267:15:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 4177,
                          "name": "MINIMUM_PERIOD",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3567,
                          "src": "13286:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "13267:33:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4179,
                        "name": "ERROR_SET_PERIOD_TOO_SHORT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3585,
                        "src": "13302:26:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4175,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "13259:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4180,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13259:70:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4181,
                  "nodeType": "ExpressionStatement",
                  "src": "13259:70:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4186,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4182,
                        "name": "settings",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3699,
                        "src": "13339:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Settings_$3695_storage",
                          "typeString": "struct Finance.Settings storage ref"
                        }
                      },
                      "id": 4184,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "periodDuration",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3686,
                      "src": "13339:23:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4185,
                      "name": "_periodDuration",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4158,
                      "src": "13365:15:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "13339:41:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4187,
                  "nodeType": "ExpressionStatement",
                  "src": "13339:41:7"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4189,
                        "name": "_periodDuration",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4158,
                        "src": "13416:15:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 4188,
                      "name": "ChangePeriodDuration",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3765,
                      "src": "13395:20:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint64_$returns$__$",
                        "typeString": "function (uint64)"
                      }
                    },
                    "id": 4190,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13395:37:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4191,
                  "nodeType": "EmitStatement",
                  "src": "13390:42:7"
                }
              ]
            },
            "documentation": "@notice Change period duration to `@transformTime(_periodDuration)`, effective for next accounting period\n@param _periodDuration Duration in seconds for accounting periods",
            "id": 4193,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4161,
                    "name": "CHANGE_PERIOD_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3526,
                    "src": "13134:18:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4164,
                            "name": "_periodDuration",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4158,
                            "src": "13166:15:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          ],
                          "id": 4163,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "13158:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 4165,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13158:24:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4167,
                              "name": "settings",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3699,
                              "src": "13192:8:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Settings_$3695_storage",
                                "typeString": "struct Finance.Settings storage ref"
                              }
                            },
                            "id": 4168,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "periodDuration",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3686,
                            "src": "13192:23:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          ],
                          "id": 4166,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "13184:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 4169,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13184:32:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4162,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9167,
                        9182,
                        9202,
                        9217,
                        9237,
                        9258,
                        9282,
                        9302,
                        9331,
                        9356,
                        9381,
                        9404,
                        9435,
                        9474,
                        9521,
                        9576
                      ],
                      "referencedDeclaration": 9435,
                      "src": "13154:3:7",
                      "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": 4170,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13154:63:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 4171,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4160,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10428,
                  "src": "13128:5:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13128:90:7"
              },
              {
                "arguments": null,
                "id": 4173,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4172,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3785,
                  "src": "13227:17:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13227:17:7"
              }
            ],
            "name": "setPeriodDuration",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4159,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4158,
                  "name": "_periodDuration",
                  "nodeType": "VariableDeclaration",
                  "scope": 4193,
                  "src": "13079:22:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4157,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "13079:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13078:24:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4174,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13249:0:7"
            },
            "scope": 5528,
            "src": "13052:387:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4251,
              "nodeType": "Block",
              "src": "13906:198:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4228,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4222,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3699,
                          "src": "13916:8:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$3695_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 4225,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "budgets",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3690,
                        "src": "13916:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 4226,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 4224,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4195,
                        "src": "13933:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "13916:24:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4227,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4197,
                      "src": "13943:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13916:34:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4229,
                  "nodeType": "ExpressionStatement",
                  "src": "13916:34:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 4234,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "13964:27:7",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4230,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3699,
                          "src": "13965:8:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$3695_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 4231,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hasBudget",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3694,
                        "src": "13965:18:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 4233,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 4232,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4195,
                        "src": "13984:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "13965:26:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4244,
                  "nodeType": "IfStatement",
                  "src": "13960:91:7",
                  "trueBody": {
                    "id": 4243,
                    "nodeType": "Block",
                    "src": "13993:58:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4241,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4235,
                                "name": "settings",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3699,
                                "src": "14007:8:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Settings_$3695_storage",
                                  "typeString": "struct Finance.Settings storage ref"
                                }
                              },
                              "id": 4238,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "hasBudget",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3694,
                              "src": "14007:18:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 4239,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 4237,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4195,
                              "src": "14026:6:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "14007:26:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "74727565",
                            "id": 4240,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "14036:4:7",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "14007:33:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4242,
                        "nodeType": "ExpressionStatement",
                        "src": "14007:33:7"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4246,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4195,
                        "src": "14075:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4247,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4197,
                        "src": "14083:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "74727565",
                        "id": 4248,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14092:4:7",
                        "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": 4245,
                      "name": "SetBudget",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3733,
                      "src": "14065:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (address,uint256,bool)"
                      }
                    },
                    "id": 4249,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14065:32:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4250,
                  "nodeType": "EmitStatement",
                  "src": "14060:37:7"
                }
              ]
            },
            "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": 4252,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4200,
                    "name": "CHANGE_BUDGETS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3531,
                    "src": "13762:19:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4202,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4195,
                        "src": "13787:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4203,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4197,
                        "src": "13795:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4204,
                            "name": "settings",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3699,
                            "src": "13804:8:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Settings_$3695_storage",
                              "typeString": "struct Finance.Settings storage ref"
                            }
                          },
                          "id": 4205,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "budgets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3690,
                          "src": "13804:16:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                          }
                        },
                        "id": 4207,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 4206,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4195,
                          "src": "13821:6:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "13804:24:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "condition": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4209,
                                  "name": "settings",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3699,
                                  "src": "13838:8:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Settings_$3695_storage",
                                    "typeString": "struct Finance.Settings storage ref"
                                  }
                                },
                                "id": 4210,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "hasBudget",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3694,
                                "src": "13838:18:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                  "typeString": "mapping(address => bool)"
                                }
                              },
                              "id": 4212,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 4211,
                                "name": "_token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4195,
                                "src": "13857:6:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "13838:26:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 4214,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13871:1:7",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "id": 4215,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "Conditional",
                            "src": "13838:34:7",
                            "trueExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 4213,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13867:1:7",
                              "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": 4208,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "13830:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 4216,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13830:43:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4201,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9167,
                        9182,
                        9202,
                        9217,
                        9237,
                        9258,
                        9282,
                        9302,
                        9331,
                        9356,
                        9381,
                        9404,
                        9435,
                        9474,
                        9521,
                        9576
                      ],
                      "referencedDeclaration": 9282,
                      "src": "13783:3:7",
                      "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": 4217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13783:91:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 4218,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4199,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10428,
                  "src": "13756:5:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13756:119:7"
              },
              {
                "arguments": null,
                "id": 4220,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4219,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3785,
                  "src": "13884:17:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13884:17:7"
              }
            ],
            "name": "setBudget",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4198,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4195,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 4252,
                  "src": "13685:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4194,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13685:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4197,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4252,
                  "src": "13709:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4196,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13709:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13675:55:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4221,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13906:0:7"
            },
            "scope": 5528,
            "src": "13657:447:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4303,
              "nodeType": "Block",
              "src": "14468:131:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4287,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4281,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3699,
                          "src": "14478:8:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$3695_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 4284,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "budgets",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3690,
                        "src": "14478:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 4285,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 4283,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4254,
                        "src": "14495:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "14478:24:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 4286,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14505:1:7",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "14478:28:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4288,
                  "nodeType": "ExpressionStatement",
                  "src": "14478:28:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4295,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4289,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3699,
                          "src": "14516:8:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$3695_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 4292,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hasBudget",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3694,
                        "src": "14516:18:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 4293,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 4291,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4254,
                        "src": "14535:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "14516:26:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 4294,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14545:5:7",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "14516:34:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4296,
                  "nodeType": "ExpressionStatement",
                  "src": "14516:34:7"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4298,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4254,
                        "src": "14575:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 4299,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14583:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 4300,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14586:5:7",
                        "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": 4297,
                      "name": "SetBudget",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3733,
                      "src": "14565:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (address,uint256,bool)"
                      }
                    },
                    "id": 4301,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14565:27:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4302,
                  "nodeType": "EmitStatement",
                  "src": "14560:32:7"
                }
              ]
            },
            "documentation": "@notice Remove spending limit for `_token.symbol(): string`, effective immediately\n@param _token Address for token",
            "id": 4304,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4257,
                    "name": "CHANGE_BUDGETS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3531,
                    "src": "14321:19:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4259,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4254,
                        "src": "14346:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 4261,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "14362:1:7",
                            "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": 4260,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14354:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 4262,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14354:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4263,
                            "name": "settings",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3699,
                            "src": "14366:8:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Settings_$3695_storage",
                              "typeString": "struct Finance.Settings storage ref"
                            }
                          },
                          "id": 4264,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "budgets",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3690,
                          "src": "14366:16:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                          }
                        },
                        "id": 4266,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 4265,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4254,
                          "src": "14383:6:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "14366:24:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "condition": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4268,
                                  "name": "settings",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3699,
                                  "src": "14400:8:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Settings_$3695_storage",
                                    "typeString": "struct Finance.Settings storage ref"
                                  }
                                },
                                "id": 4269,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "hasBudget",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3694,
                                "src": "14400:18:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                  "typeString": "mapping(address => bool)"
                                }
                              },
                              "id": 4271,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 4270,
                                "name": "_token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4254,
                                "src": "14419:6:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "14400:26:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 4273,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14433:1:7",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "id": 4274,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "Conditional",
                            "src": "14400:34:7",
                            "trueExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 4272,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14429:1:7",
                              "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": 4267,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14392:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 4275,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14392:43:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4258,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9167,
                        9182,
                        9202,
                        9217,
                        9237,
                        9258,
                        9282,
                        9302,
                        9331,
                        9356,
                        9381,
                        9404,
                        9435,
                        9474,
                        9521,
                        9576
                      ],
                      "referencedDeclaration": 9282,
                      "src": "14342:3:7",
                      "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": 4276,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14342:94:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 4277,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4256,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10428,
                  "src": "14315:5:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14315:122:7"
              },
              {
                "arguments": null,
                "id": 4279,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4278,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3785,
                  "src": "14446:17:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14446:17:7"
              }
            ],
            "name": "removeBudget",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4255,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4254,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 4304,
                  "src": "14274:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4253,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14274:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14273:16:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4280,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14468:0:7"
            },
            "scope": 5528,
            "src": "14252:347:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4328,
              "nodeType": "Block",
              "src": "14993:55:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4325,
                        "name": "_paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4306,
                        "src": "15030:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4324,
                      "name": "_executePaymentAtLeastOnce",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4976,
                      "src": "15003:26:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 4326,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15003:38:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4327,
                  "nodeType": "ExpressionStatement",
                  "src": "15003:38:7"
                }
              ]
            },
            "documentation": "@notice Execute pending payment #`_paymentId`\n@dev Executes any payment (requires role)\n@param _paymentId Identifier for payment",
            "id": 4329,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4309,
                    "name": "EXECUTE_PAYMENTS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3536,
                    "src": "14842:21:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4311,
                        "name": "_paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4306,
                        "src": "14869:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 4312,
                            "name": "scheduledPayments",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3703,
                            "src": "14881:17:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ScheduledPayment_$3649_storage_$",
                              "typeString": "mapping(uint256 => struct Finance.ScheduledPayment storage ref)"
                            }
                          },
                          "id": 4314,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 4313,
                            "name": "_paymentId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4306,
                            "src": "14899:10:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "14881:29:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage",
                            "typeString": "struct Finance.ScheduledPayment storage ref"
                          }
                        },
                        "id": 4315,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "amount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3640,
                        "src": "14881:36:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4310,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9167,
                        9182,
                        9202,
                        9217,
                        9237,
                        9258,
                        9282,
                        9302,
                        9331,
                        9356,
                        9381,
                        9404,
                        9435,
                        9474,
                        9521,
                        9576
                      ],
                      "referencedDeclaration": 9435,
                      "src": "14865:3:7",
                      "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": 4316,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14865:53:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 4317,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4308,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10428,
                  "src": "14836:5:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14836:83:7"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4319,
                    "name": "_paymentId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4306,
                    "src": "14951:10:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 4320,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4318,
                  "name": "scheduledPaymentExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3802,
                  "src": "14928:22:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14928:34:7"
              },
              {
                "arguments": null,
                "id": 4322,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4321,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3785,
                  "src": "14971:17:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14971:17:7"
              }
            ],
            "name": "executePayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4307,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4306,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4329,
                  "src": "14791:18:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4305,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14791:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14790:20:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4323,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14993:0:7"
            },
            "scope": 5528,
            "src": "14767:281:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4354,
              "nodeType": "Block",
              "src": "15550:150:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 4346,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 4340,
                              "name": "scheduledPayments",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3703,
                              "src": "15568:17:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ScheduledPayment_$3649_storage_$",
                                "typeString": "mapping(uint256 => struct Finance.ScheduledPayment storage ref)"
                              }
                            },
                            "id": 4342,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 4341,
                              "name": "_paymentId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4331,
                              "src": "15586:10:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "15568:29:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage",
                              "typeString": "struct Finance.ScheduledPayment storage ref"
                            }
                          },
                          "id": 4343,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "receiver",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3634,
                          "src": "15568:38:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4344,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15153,
                            "src": "15610:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 4345,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "15610:10:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "15568:52:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4347,
                        "name": "ERROR_PAYMENT_RECEIVER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3618,
                        "src": "15622:22:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4339,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "15560:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4348,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15560:85:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4349,
                  "nodeType": "ExpressionStatement",
                  "src": "15560:85:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4351,
                        "name": "_paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4331,
                        "src": "15682:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4350,
                      "name": "_executePaymentAtLeastOnce",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4976,
                      "src": "15655:26:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 4352,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15655:38:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4353,
                  "nodeType": "ExpressionStatement",
                  "src": "15655:38:7"
                }
              ]
            },
            "documentation": "@notice Execute pending payment #`_paymentId`\n@dev Always allow receiver of a payment to trigger execution\n     Initialization check is implicitly provided by `scheduledPaymentExists()` as new\n     scheduled payments can only be created via `newScheduledPayment(),` which requires initialization\n@param _paymentId Identifier for payment",
            "id": 4355,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4334,
                    "name": "_paymentId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4331,
                    "src": "15520:10:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 4335,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4333,
                  "name": "scheduledPaymentExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3802,
                  "src": "15497:22:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15497:34:7"
              },
              {
                "arguments": null,
                "id": 4337,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4336,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3785,
                  "src": "15532:17:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15532:17:7"
              }
            ],
            "name": "receiverExecutePayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4332,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4331,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4355,
                  "src": "15468:18:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4330,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15468:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15467:20:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4338,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15550:0:7"
            },
            "scope": 5528,
            "src": "15436:264:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4390,
              "nodeType": "Block",
              "src": "16397:120:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4383,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 4377,
                          "name": "scheduledPayments",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3703,
                          "src": "16407:17:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ScheduledPayment_$3649_storage_$",
                            "typeString": "mapping(uint256 => struct Finance.ScheduledPayment storage ref)"
                          }
                        },
                        "id": 4379,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 4378,
                          "name": "_paymentId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4357,
                          "src": "16425:10:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "16407:29:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage",
                          "typeString": "struct Finance.ScheduledPayment storage ref"
                        }
                      },
                      "id": 4380,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "inactive",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3638,
                      "src": "16407:38:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4382,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "16448:8:7",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 4381,
                        "name": "_active",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4359,
                        "src": "16449:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "16407:49:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4384,
                  "nodeType": "ExpressionStatement",
                  "src": "16407:49:7"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4386,
                        "name": "_paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4357,
                        "src": "16490:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4387,
                        "name": "_active",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4359,
                        "src": "16502:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4385,
                      "name": "ChangePaymentState",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3761,
                      "src": "16471:18:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (uint256,bool)"
                      }
                    },
                    "id": 4388,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16471:39:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4389,
                  "nodeType": "EmitStatement",
                  "src": "16466:44:7"
                }
              ]
            },
            "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": 4391,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4362,
                    "name": "MANAGE_PAYMENTS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3541,
                    "src": "16285:20:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4364,
                        "name": "_paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4357,
                        "src": "16311:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "condition": {
                              "argumentTypes": null,
                              "id": 4366,
                              "name": "_active",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4359,
                              "src": "16331:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 4368,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "16345:1:7",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "id": 4369,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "Conditional",
                            "src": "16331:15:7",
                            "trueExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 4367,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "16341:1:7",
                              "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": 4365,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "16323:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 4370,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16323:24:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4363,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9167,
                        9182,
                        9202,
                        9217,
                        9237,
                        9258,
                        9282,
                        9302,
                        9331,
                        9356,
                        9381,
                        9404,
                        9435,
                        9474,
                        9521,
                        9576
                      ],
                      "referencedDeclaration": 9435,
                      "src": "16307:3:7",
                      "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": 4371,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16307:41:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 4372,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4361,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10428,
                  "src": "16279:5:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16279:70:7"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4374,
                    "name": "_paymentId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4357,
                    "src": "16381:10:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 4375,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4373,
                  "name": "scheduledPaymentExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3802,
                  "src": "16358:22:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16358:34:7"
              }
            ],
            "name": "setPaymentStatus",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4360,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4357,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4391,
                  "src": "16220:18:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4356,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16220:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4359,
                  "name": "_active",
                  "nodeType": "VariableDeclaration",
                  "scope": 4391,
                  "src": "16240:12:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4358,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "16240:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16219:34:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4376,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16397:0:7"
            },
            "scope": 5528,
            "src": "16194:323:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4436,
              "nodeType": "Block",
              "src": "17011:321:7",
              "statements": [
                {
                  "assignments": [
                    4401
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4401,
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 4437,
                      "src": "17021:14:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4400,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17021:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4418,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 4404,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 4402,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4393,
                        "src": "17038:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 4403,
                        "name": "ETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10661,
                        "src": "17048:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "17038:13:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4414,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15232,
                              "src": "17116:4:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Finance_$5528",
                                "typeString": "contract Finance"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_Finance_$5528",
                                "typeString": "contract Finance"
                              }
                            ],
                            "id": 4413,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "17108:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 4415,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17108:13:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4410,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4393,
                              "src": "17084:6:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 4409,
                            "name": "ERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14294,
                            "src": "17078:5:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_ERC20_$14294_$",
                              "typeString": "type(contract ERC20)"
                            }
                          },
                          "id": 4411,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17078:13:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$14294",
                            "typeString": "contract ERC20"
                          }
                        },
                        "id": 4412,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "staticBalanceOf",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 11080,
                        "src": "17078:29:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_contract$_ERC20_$14294_$_t_address_$returns$_t_uint256_$bound_to$_t_contract$_ERC20_$14294_$",
                          "typeString": "function (contract ERC20,address) view returns (uint256)"
                        }
                      },
                      "id": 4416,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "17078:44:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 4417,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "17038:84:7",
                    "trueExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4406,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15232,
                            "src": "17062:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Finance_$5528",
                              "typeString": "contract Finance"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Finance_$5528",
                              "typeString": "contract Finance"
                            }
                          ],
                          "id": 4405,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "17054:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 4407,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17054:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 4408,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17054:21:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17021:101:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4422,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4420,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4401,
                          "src": "17140:6:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 4421,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "17149:1:7",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "17140:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4423,
                        "name": "ERROR_RECOVER_AMOUNT_ZERO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3600,
                        "src": "17152:25:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4419,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "17132:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4424,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17132:46:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4425,
                  "nodeType": "ExpressionStatement",
                  "src": "17132:46:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4427,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4393,
                        "src": "17211:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4428,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4401,
                        "src": "17231:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5265636f76657220746f205661756c74",
                        "id": 4429,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17251:18:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_44b346127d1482933635aa4b55865bc72d4d3e4d60d301bd26394661695fe15d",
                          "typeString": "literal_string \"Recover to Vault\""
                        },
                        "value": "Recover to Vault"
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4431,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15232,
                            "src": "17291:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Finance_$5528",
                              "typeString": "contract Finance"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Finance_$5528",
                              "typeString": "contract Finance"
                            }
                          ],
                          "id": 4430,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "17283:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 4432,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17283:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 4433,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17310:5:7",
                        "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_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4426,
                      "name": "_deposit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4866,
                      "src": "17189:8:7",
                      "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": 4434,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17189:136:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4435,
                  "nodeType": "ExpressionStatement",
                  "src": "17189:136:7"
                }
              ]
            },
            "documentation": "@notice Send tokens held in this contract to the Vault\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@param _token Token whose balance is going to be transferred.",
            "id": 4437,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 4396,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4395,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10752,
                  "src": "16979:13:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16979:13:7"
              },
              {
                "arguments": null,
                "id": 4398,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4397,
                  "name": "transitionsPeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3785,
                  "src": "16993:17:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16993:17:7"
              }
            ],
            "name": "recoverToVault",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4394,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4393,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 4437,
                  "src": "16954:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4392,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16954:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16953:16:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4399,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17011:0:7"
            },
            "scope": 5528,
            "src": "16930:402:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4450,
              "nodeType": "Block",
              "src": "17995:71:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4447,
                        "name": "_maxTransitions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4439,
                        "src": "18043:15:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 4446,
                      "name": "_tryTransitionAccountingPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5331,
                      "src": "18012:30:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint64_$returns$_t_bool_$",
                        "typeString": "function (uint64) returns (bool)"
                      }
                    },
                    "id": 4448,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18012:47:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4445,
                  "id": 4449,
                  "nodeType": "Return",
                  "src": "18005:54:7"
                }
              ]
            },
            "documentation": "@notice Transition accounting period if needed\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@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": 4451,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 4442,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4441,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10752,
                  "src": "17958:13:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17958:13:7"
              }
            ],
            "name": "tryTransitionAccountingPeriod",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4440,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4439,
                  "name": "_maxTransitions",
                  "nodeType": "VariableDeclaration",
                  "scope": 4451,
                  "src": "17925:22:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4438,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "17925:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17924:24:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4445,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4444,
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 4451,
                  "src": "17981:12:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4443,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "17981:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17980:14:7"
            },
            "scope": 5528,
            "src": "17886:180:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4462,
              "nodeType": "Block",
              "src": "18433:41:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4460,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "18450:17:7",
                    "subExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 4458,
                        "name": "hasInitialized",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10782,
                        "src": "18451:14:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                          "typeString": "function () view returns (bool)"
                        }
                      },
                      "id": 4459,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "18451:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4457,
                  "id": 4461,
                  "nodeType": "Return",
                  "src": "18443:24:7"
                }
              ]
            },
            "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": 4463,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "allowRecoverability",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4454,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4453,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4463,
                  "src": "18397:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4452,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18397:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18396:9:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4457,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4456,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4463,
                  "src": "18427:4:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4455,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "18427:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18426:6:7"
            },
            "scope": 5528,
            "src": "18368:106:7",
            "stateMutability": "view",
            "superFunction": 11416,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4540,
              "nodeType": "Block",
              "src": "18898:441:7",
              "statements": [
                {
                  "assignments": [
                    4490
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4490,
                      "name": "payment",
                      "nodeType": "VariableDeclaration",
                      "scope": 4541,
                      "src": "18908:32:7",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                        "typeString": "struct Finance.ScheduledPayment"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 4489,
                        "name": "ScheduledPayment",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3649,
                        "src": "18908:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4494,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 4491,
                      "name": "scheduledPayments",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3703,
                      "src": "18943:17:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ScheduledPayment_$3649_storage_$",
                        "typeString": "mapping(uint256 => struct Finance.ScheduledPayment storage ref)"
                      }
                    },
                    "id": 4493,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 4492,
                      "name": "_paymentId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4465,
                      "src": "18961:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "18943:29:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage",
                      "typeString": "struct Finance.ScheduledPayment storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18908:64:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4498,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4495,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4471,
                      "src": "18983:5:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4496,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4490,
                        "src": "18991:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 4497,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "token",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3632,
                      "src": "18991:13:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "18983:21:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4499,
                  "nodeType": "ExpressionStatement",
                  "src": "18983:21:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4503,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4500,
                      "name": "receiver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4473,
                      "src": "19014:8:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4501,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4490,
                        "src": "19025:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 4502,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "receiver",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3634,
                      "src": "19025:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "19014:27:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4504,
                  "nodeType": "ExpressionStatement",
                  "src": "19014:27:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4508,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4505,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4475,
                      "src": "19051:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4506,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4490,
                        "src": "19060:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 4507,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3640,
                      "src": "19060:14:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "19051:23:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4509,
                  "nodeType": "ExpressionStatement",
                  "src": "19051:23:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4513,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4510,
                      "name": "initialPaymentTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4477,
                      "src": "19084:18:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4511,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4490,
                        "src": "19105:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 4512,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialPaymentTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3642,
                      "src": "19105:26:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "19084:47:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4514,
                  "nodeType": "ExpressionStatement",
                  "src": "19084:47:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4518,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4515,
                      "name": "interval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4479,
                      "src": "19141:8:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4516,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4490,
                        "src": "19152:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 4517,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "interval",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3644,
                      "src": "19152:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "19141:27:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4519,
                  "nodeType": "ExpressionStatement",
                  "src": "19141:27:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4523,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4520,
                      "name": "maxExecutions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4481,
                      "src": "19178:13:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4521,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4490,
                        "src": "19194:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 4522,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "maxExecutions",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3646,
                      "src": "19194:21:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "19178:37:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4524,
                  "nodeType": "ExpressionStatement",
                  "src": "19178:37:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4528,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4525,
                      "name": "executions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4485,
                      "src": "19225:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4526,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4490,
                        "src": "19238:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 4527,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "executions",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3648,
                      "src": "19238:18:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "19225:31:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4529,
                  "nodeType": "ExpressionStatement",
                  "src": "19225:31:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4533,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4530,
                      "name": "inactive",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4483,
                      "src": "19266:8:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4531,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4490,
                        "src": "19277:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 4532,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "inactive",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3638,
                      "src": "19277:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "19266:27:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4534,
                  "nodeType": "ExpressionStatement",
                  "src": "19266:27:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4538,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4535,
                      "name": "createdBy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4487,
                      "src": "19303:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4536,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4490,
                        "src": "19315:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 4537,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "createdBy",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3636,
                      "src": "19315:17:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "19303:29:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4539,
                  "nodeType": "ExpressionStatement",
                  "src": "19303:29:7"
                }
              ]
            },
            "documentation": null,
            "id": 4541,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4468,
                    "name": "_paymentId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4465,
                    "src": "18579:10:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 4469,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4467,
                  "name": "scheduledPaymentExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3802,
                  "src": "18556:22:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18556:34:7"
              }
            ],
            "name": "getPayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4466,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4465,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4541,
                  "src": "18500:18:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4464,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18500:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18499:20:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4488,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4471,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 4541,
                  "src": "18621:13:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4470,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18621:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4473,
                  "name": "receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 4541,
                  "src": "18648:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4472,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18648:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4475,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4541,
                  "src": "18678:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4474,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18678:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4477,
                  "name": "initialPaymentTime",
                  "nodeType": "VariableDeclaration",
                  "scope": 4541,
                  "src": "18706:25:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4476,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "18706:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4479,
                  "name": "interval",
                  "nodeType": "VariableDeclaration",
                  "scope": 4541,
                  "src": "18745:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4478,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "18745:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4481,
                  "name": "maxExecutions",
                  "nodeType": "VariableDeclaration",
                  "scope": 4541,
                  "src": "18774:20:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4480,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "18774:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4483,
                  "name": "inactive",
                  "nodeType": "VariableDeclaration",
                  "scope": 4541,
                  "src": "18808:13:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4482,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "18808:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4485,
                  "name": "executions",
                  "nodeType": "VariableDeclaration",
                  "scope": 4541,
                  "src": "18835:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4484,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "18835:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4487,
                  "name": "createdBy",
                  "nodeType": "VariableDeclaration",
                  "scope": 4541,
                  "src": "18866:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4486,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18866:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18607:286:7"
            },
            "scope": 5528,
            "src": "18480:859:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4611,
              "nodeType": "Block",
              "src": "19734:420:7",
              "statements": [
                {
                  "assignments": [
                    4566
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4566,
                      "name": "transaction",
                      "nodeType": "VariableDeclaration",
                      "scope": 4612,
                      "src": "19744:31:7",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                        "typeString": "struct Finance.Transaction"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 4565,
                        "name": "Transaction",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3666,
                        "src": "19744:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4570,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 4567,
                      "name": "transactions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3709,
                      "src": "19778:12:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Transaction_$3666_storage_$",
                        "typeString": "mapping(uint256 => struct Finance.Transaction storage ref)"
                      }
                    },
                    "id": 4569,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 4568,
                      "name": "_transactionId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4543,
                      "src": "19791:14:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "19778:28:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Transaction_$3666_storage",
                      "typeString": "struct Finance.Transaction storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19744:62:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4574,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4571,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4557,
                      "src": "19817:5:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4572,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4566,
                        "src": "19825:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 4573,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "token",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3651,
                      "src": "19825:17:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "19817:25:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4575,
                  "nodeType": "ExpressionStatement",
                  "src": "19817:25:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4579,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4576,
                      "name": "entity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4559,
                      "src": "19852:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4577,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4566,
                        "src": "19861:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 4578,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "entity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3653,
                      "src": "19861:18:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "19852:27:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4580,
                  "nodeType": "ExpressionStatement",
                  "src": "19852:27:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4584,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4581,
                      "name": "isIncoming",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4561,
                      "src": "19889:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4582,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4566,
                        "src": "19902:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 4583,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "isIncoming",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3655,
                      "src": "19902:22:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "19889:35:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4585,
                  "nodeType": "ExpressionStatement",
                  "src": "19889:35:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4589,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4586,
                      "name": "date",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4563,
                      "src": "19934:4:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4587,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4566,
                        "src": "19941:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 4588,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "date",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3663,
                      "src": "19941:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "19934:23:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4590,
                  "nodeType": "ExpressionStatement",
                  "src": "19934:23:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4594,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4591,
                      "name": "periodId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4549,
                      "src": "19967:8:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4592,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4566,
                        "src": "19978:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 4593,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "periodId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3665,
                      "src": "19978:20:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "19967:31:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4595,
                  "nodeType": "ExpressionStatement",
                  "src": "19967:31:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4599,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4596,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4551,
                      "src": "20008:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4597,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4566,
                        "src": "20017:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 4598,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3657,
                      "src": "20017:18:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20008:27:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4600,
                  "nodeType": "ExpressionStatement",
                  "src": "20008:27:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4604,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4601,
                      "name": "paymentId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4553,
                      "src": "20045:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4602,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4566,
                        "src": "20057:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 4603,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "paymentId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3659,
                      "src": "20057:21:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20045:33:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4605,
                  "nodeType": "ExpressionStatement",
                  "src": "20045:33:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4609,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4606,
                      "name": "paymentExecutionNumber",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4555,
                      "src": "20088:22:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4607,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4566,
                        "src": "20113:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 4608,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "paymentExecutionNumber",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3661,
                      "src": "20113:34:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "20088:59:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4610,
                  "nodeType": "ExpressionStatement",
                  "src": "20088:59:7"
                }
              ]
            },
            "documentation": null,
            "id": 4612,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4546,
                    "name": "_transactionId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4543,
                    "src": "19447:14:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 4547,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4545,
                  "name": "transactionExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3819,
                  "src": "19429:17:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "19429:33:7"
              }
            ],
            "name": "getTransaction",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4544,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4543,
                  "name": "_transactionId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4612,
                  "src": "19369:22:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4542,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19369:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19368:24:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4564,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4549,
                  "name": "periodId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4612,
                  "src": "19493:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4548,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "19493:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4551,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4612,
                  "src": "19522:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4550,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19522:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4553,
                  "name": "paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4612,
                  "src": "19550:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4552,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19550:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4555,
                  "name": "paymentExecutionNumber",
                  "nodeType": "VariableDeclaration",
                  "scope": 4612,
                  "src": "19581:29:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4554,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "19581:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4557,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 4612,
                  "src": "19624:13:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4556,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19624:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4559,
                  "name": "entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 4612,
                  "src": "19651:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4558,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19651:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4561,
                  "name": "isIncoming",
                  "nodeType": "VariableDeclaration",
                  "scope": 4612,
                  "src": "19679:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4560,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "19679:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4563,
                  "name": "date",
                  "nodeType": "VariableDeclaration",
                  "scope": 4612,
                  "src": "19708:11:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4562,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "19708:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19479:250:7"
            },
            "scope": 5528,
            "src": "19345:809:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4663,
              "nodeType": "Block",
              "src": "20453:296:7",
              "statements": [
                {
                  "assignments": [
                    4631
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4631,
                      "name": "period",
                      "nodeType": "VariableDeclaration",
                      "scope": 4664,
                      "src": "20463:21:7",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                        "typeString": "struct Finance.Period"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 4630,
                        "name": "Period",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3684,
                        "src": "20463:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                          "typeString": "struct Finance.Period"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4635,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 4632,
                      "name": "periods",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3715,
                      "src": "20487:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$3684_storage_$",
                        "typeString": "mapping(uint64 => struct Finance.Period storage ref)"
                      }
                    },
                    "id": 4634,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 4633,
                      "name": "_periodId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4614,
                      "src": "20495:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "20487:18:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Period_$3684_storage",
                      "typeString": "struct Finance.Period storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20463:42:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4641,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4636,
                      "name": "isCurrent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4620,
                      "src": "20516:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "id": 4640,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 4637,
                          "name": "_currentPeriodId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5364,
                          "src": "20528:16:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                            "typeString": "function () view returns (uint64)"
                          }
                        },
                        "id": 4638,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "20528:18:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 4639,
                        "name": "_periodId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4614,
                        "src": "20550:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "src": "20528:31:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "20516:43:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4642,
                  "nodeType": "ExpressionStatement",
                  "src": "20516:43:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4646,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4643,
                      "name": "startTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4622,
                      "src": "20570:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4644,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4631,
                        "src": "20582:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                          "typeString": "struct Finance.Period storage pointer"
                        }
                      },
                      "id": 4645,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "startTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3673,
                      "src": "20582:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "20570:28:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4647,
                  "nodeType": "ExpressionStatement",
                  "src": "20570:28:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4651,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4648,
                      "name": "endTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4624,
                      "src": "20608:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4649,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4631,
                        "src": "20618:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                          "typeString": "struct Finance.Period storage pointer"
                        }
                      },
                      "id": 4650,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "endTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3675,
                      "src": "20618:14:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "20608:24:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4652,
                  "nodeType": "ExpressionStatement",
                  "src": "20608:24:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4656,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4653,
                      "name": "firstTransactionId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4626,
                      "src": "20642:18:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4654,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4631,
                        "src": "20663:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                          "typeString": "struct Finance.Period storage pointer"
                        }
                      },
                      "id": 4655,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "firstTransactionId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3677,
                      "src": "20663:25:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20642:46:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4657,
                  "nodeType": "ExpressionStatement",
                  "src": "20642:46:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4661,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4658,
                      "name": "lastTransactionId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4628,
                      "src": "20698:17:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4659,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4631,
                        "src": "20718:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                          "typeString": "struct Finance.Period storage pointer"
                        }
                      },
                      "id": 4660,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "lastTransactionId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3679,
                      "src": "20718:24:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20698:44:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4662,
                  "nodeType": "ExpressionStatement",
                  "src": "20698:44:7"
                }
              ]
            },
            "documentation": null,
            "id": 4664,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4617,
                    "name": "_periodId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4614,
                    "src": "20246:9:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  }
                ],
                "id": 4618,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4616,
                  "name": "periodExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3832,
                  "src": "20233:12:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint64_$",
                    "typeString": "modifier (uint64)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "20233:23:7"
              }
            ],
            "name": "getPeriod",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4615,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4614,
                  "name": "_periodId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4664,
                  "src": "20179:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4613,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "20179:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20178:18:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4629,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4620,
                  "name": "isCurrent",
                  "nodeType": "VariableDeclaration",
                  "scope": 4664,
                  "src": "20287:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4619,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "20287:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4622,
                  "name": "startTime",
                  "nodeType": "VariableDeclaration",
                  "scope": 4664,
                  "src": "20315:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4621,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "20315:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4624,
                  "name": "endTime",
                  "nodeType": "VariableDeclaration",
                  "scope": 4664,
                  "src": "20345:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4623,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "20345:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4626,
                  "name": "firstTransactionId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4664,
                  "src": "20373:26:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4625,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20373:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4628,
                  "name": "lastTransactionId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4664,
                  "src": "20413:25:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4627,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20413:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20273:175:7"
            },
            "scope": 5528,
            "src": "20160:589:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4697,
              "nodeType": "Block",
              "src": "20937:182:7",
              "statements": [
                {
                  "assignments": [
                    4679
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4679,
                      "name": "tokenStatement",
                      "nodeType": "VariableDeclaration",
                      "scope": 4698,
                      "src": "20947:37:7",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TokenStatement_$3671_storage_ptr",
                        "typeString": "struct Finance.TokenStatement"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 4678,
                        "name": "TokenStatement",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3671,
                        "src": "20947:14:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenStatement_$3671_storage_ptr",
                          "typeString": "struct Finance.TokenStatement"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4686,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 4680,
                          "name": "periods",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3715,
                          "src": "20987:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$3684_storage_$",
                            "typeString": "mapping(uint64 => struct Finance.Period storage ref)"
                          }
                        },
                        "id": 4682,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 4681,
                          "name": "_periodId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4666,
                          "src": "20995:9:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "20987:18:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$3684_storage",
                          "typeString": "struct Finance.Period storage ref"
                        }
                      },
                      "id": 4683,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "tokenStatement",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3683,
                      "src": "20987:33:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TokenStatement_$3671_storage_$",
                        "typeString": "mapping(address => struct Finance.TokenStatement storage ref)"
                      }
                    },
                    "id": 4685,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 4684,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4668,
                      "src": "21021:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "20987:41:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TokenStatement_$3671_storage",
                      "typeString": "struct Finance.TokenStatement storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20947:81:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4690,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4687,
                      "name": "expenses",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4674,
                      "src": "21038:8:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4688,
                        "name": "tokenStatement",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4679,
                        "src": "21049:14:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenStatement_$3671_storage_ptr",
                          "typeString": "struct Finance.TokenStatement storage pointer"
                        }
                      },
                      "id": 4689,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "expenses",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3668,
                      "src": "21049:23:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21038:34:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4691,
                  "nodeType": "ExpressionStatement",
                  "src": "21038:34:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4695,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4692,
                      "name": "income",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4676,
                      "src": "21082:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4693,
                        "name": "tokenStatement",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4679,
                        "src": "21091:14:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenStatement_$3671_storage_ptr",
                          "typeString": "struct Finance.TokenStatement storage pointer"
                        }
                      },
                      "id": 4694,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "income",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3670,
                      "src": "21091:21:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21082:30:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4696,
                  "nodeType": "ExpressionStatement",
                  "src": "21082:30:7"
                }
              ]
            },
            "documentation": null,
            "id": 4698,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4671,
                    "name": "_periodId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4666,
                    "src": "20871:9:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  }
                ],
                "id": 4672,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4670,
                  "name": "periodExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3832,
                  "src": "20858:12:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint64_$",
                    "typeString": "modifier (uint64)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "20858:23:7"
              }
            ],
            "name": "getPeriodTokenStatement",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4669,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4666,
                  "name": "_periodId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4698,
                  "src": "20788:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4665,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "20788:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4668,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 4698,
                  "src": "20806:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4667,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20806:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20787:34:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4677,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4674,
                  "name": "expenses",
                  "nodeType": "VariableDeclaration",
                  "scope": 4698,
                  "src": "20899:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4673,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20899:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4676,
                  "name": "income",
                  "nodeType": "VariableDeclaration",
                  "scope": 4698,
                  "src": "20917:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4675,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20917:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20898:34:7"
            },
            "scope": 5528,
            "src": "20755:364:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4708,
              "nodeType": "Block",
              "src": "21302:42:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 4705,
                      "name": "_currentPeriodId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5364,
                      "src": "21319:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                        "typeString": "function () view returns (uint64)"
                      }
                    },
                    "id": 4706,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21319:18:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 4704,
                  "id": 4707,
                  "nodeType": "Return",
                  "src": "21312:25:7"
                }
              ]
            },
            "documentation": "@dev We have to check for initialization as periods are only valid after initializing",
            "id": 4709,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": null,
                "id": 4701,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4700,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10752,
                  "src": "21271:13:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "21271:13:7"
              }
            ],
            "name": "currentPeriodId",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4699,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "21256:2:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4704,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4703,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4709,
                  "src": "21294:6:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4702,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "21294:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21293:8:7"
            },
            "scope": 5528,
            "src": "21232:112:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4719,
              "nodeType": "Block",
              "src": "21529:47:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 4716,
                      "name": "settings",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3699,
                      "src": "21546:8:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Settings_$3695_storage",
                        "typeString": "struct Finance.Settings storage ref"
                      }
                    },
                    "id": 4717,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "periodDuration",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 3686,
                    "src": "21546:23:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 4715,
                  "id": 4718,
                  "nodeType": "Return",
                  "src": "21539:30:7"
                }
              ]
            },
            "documentation": "@dev We have to check for initialization as periods are only valid after initializing",
            "id": 4720,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": null,
                "id": 4712,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4711,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10752,
                  "src": "21498:13:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "21498:13:7"
              }
            ],
            "name": "getPeriodDuration",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4710,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "21483:2:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4715,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4714,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4720,
                  "src": "21521:6:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4713,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "21521:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21520:8:7"
            },
            "scope": 5528,
            "src": "21457:119:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4745,
              "nodeType": "Block",
              "src": "21791:98:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4736,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4731,
                      "name": "budget",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4727,
                      "src": "21801:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4732,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3699,
                          "src": "21810:8:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$3695_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 4733,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "budgets",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3690,
                        "src": "21810:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 4735,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 4734,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4722,
                        "src": "21827:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "21810:24:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21801:33:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4737,
                  "nodeType": "ExpressionStatement",
                  "src": "21801:33:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4743,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4738,
                      "name": "hasBudget",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4729,
                      "src": "21844:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4739,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3699,
                          "src": "21856:8:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$3695_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 4740,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hasBudget",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3694,
                        "src": "21856:18:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 4742,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 4741,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4722,
                        "src": "21875:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "21856:26:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "21844:38:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4744,
                  "nodeType": "ExpressionStatement",
                  "src": "21844:38:7"
                }
              ]
            },
            "documentation": "@dev We have to check for initialization as budgets are only valid after initializing",
            "id": 4746,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": null,
                "id": 4725,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4724,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10752,
                  "src": "21736:13:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "21736:13:7"
              }
            ],
            "name": "getBudget",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4723,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4722,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 4746,
                  "src": "21708:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4721,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21708:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21707:16:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4730,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4727,
                  "name": "budget",
                  "nodeType": "VariableDeclaration",
                  "scope": 4746,
                  "src": "21759:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4726,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21759:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4729,
                  "name": "hasBudget",
                  "nodeType": "VariableDeclaration",
                  "scope": 4746,
                  "src": "21775:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4728,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "21775:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21758:32:7"
            },
            "scope": 5528,
            "src": "21689:200:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4759,
              "nodeType": "Block",
              "src": "22090:51:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4756,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4748,
                        "src": "22127:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 4755,
                      "name": "_getRemainingBudget",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5410,
                      "src": "22107:19:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 4757,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22107:27:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4754,
                  "id": 4758,
                  "nodeType": "Return",
                  "src": "22100:34:7"
                }
              ]
            },
            "documentation": "@dev We have to check for initialization as budgets are only valid after initializing",
            "id": 4760,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": null,
                "id": 4751,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4750,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10752,
                  "src": "22058:13:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "22058:13:7"
              }
            ],
            "name": "getRemainingBudget",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4749,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4748,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 4760,
                  "src": "22030:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4747,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "22030:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22029:16:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4754,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4753,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4760,
                  "src": "22081:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4752,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22081:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22080:9:7"
            },
            "scope": 5528,
            "src": "22002:139:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4776,
              "nodeType": "Block",
              "src": "22352:56:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4772,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4762,
                        "src": "22385:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4773,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4764,
                        "src": "22393:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4771,
                      "name": "_canMakePayment",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5354,
                      "src": "22369:15:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) view returns (bool)"
                      }
                    },
                    "id": 4774,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22369:32:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4770,
                  "id": 4775,
                  "nodeType": "Return",
                  "src": "22362:39:7"
                }
              ]
            },
            "documentation": "@dev We have to check for initialization as budgets are only valid after initializing",
            "id": 4777,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": null,
                "id": 4767,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4766,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10752,
                  "src": "22323:13:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "22323:13:7"
              }
            ],
            "name": "canMakePayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4765,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4762,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 4777,
                  "src": "22278:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4761,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "22278:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4764,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4777,
                  "src": "22294:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4763,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22294:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22277:33:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4770,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4769,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4777,
                  "src": "22346:4:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4768,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "22346:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22345:6:7"
            },
            "scope": 5528,
            "src": "22254:154:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4791,
              "nodeType": "Block",
              "src": "22739:52:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4788,
                        "name": "_paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4779,
                        "src": "22773:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4787,
                      "name": "_nextPaymentTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5452,
                      "src": "22756:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint64_$",
                        "typeString": "function (uint256) view returns (uint64)"
                      }
                    },
                    "id": 4789,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22756:28:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 4786,
                  "id": 4790,
                  "nodeType": "Return",
                  "src": "22749:35:7"
                }
              ]
            },
            "documentation": "@dev Initialization check is implicitly provided by `scheduledPaymentExists()` as new\n     scheduled payments can only be created via `newScheduledPayment(),` which requires initialization",
            "id": 4792,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4782,
                    "name": "_paymentId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4779,
                    "src": "22710:10:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 4783,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4781,
                  "name": "scheduledPaymentExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3802,
                  "src": "22687:22:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "22687:34:7"
              }
            ],
            "name": "nextPaymentTime",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4780,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4779,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4792,
                  "src": "22655:18:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4778,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22655:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22654:20:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4786,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4785,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4792,
                  "src": "22731:6:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4784,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "22731:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22730:8:7"
            },
            "scope": 5528,
            "src": "22630:161:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4865,
              "nodeType": "Block",
              "src": "22939:1053:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4806,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4794,
                        "src": "22989:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4807,
                        "name": "_sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4800,
                        "src": "23009:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4808,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4796,
                        "src": "23030:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4809,
                        "name": "_reference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4798,
                        "src": "23051:10:7",
                        "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": 4805,
                      "name": "_recordIncomingTransaction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5125,
                      "src": "22949:26:7",
                      "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": 4810,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22949:122:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4811,
                  "nodeType": "ExpressionStatement",
                  "src": "22949:122:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 4814,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4812,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4794,
                      "src": "23086:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4813,
                      "name": "ETH",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10661,
                      "src": "23096:3:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "23086:13:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 4863,
                    "nodeType": "Block",
                    "src": "23174:812:7",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "id": 4827,
                          "name": "_isExternalDeposit",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4802,
                          "src": "23412:18:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 4844,
                        "nodeType": "IfStatement",
                        "src": "23408:305:7",
                        "trueBody": {
                          "id": 4843,
                          "nodeType": "Block",
                          "src": "23432:281:7",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 4833,
                                          "name": "msg",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 15153,
                                          "src": "23589:3:7",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_message",
                                            "typeString": "msg"
                                          }
                                        },
                                        "id": 4834,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "sender",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "23589:10:7",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 4836,
                                            "name": "this",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 15232,
                                            "src": "23609:4:7",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_contract$_Finance_$5528",
                                              "typeString": "contract Finance"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_contract$_Finance_$5528",
                                              "typeString": "contract Finance"
                                            }
                                          ],
                                          "id": 4835,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "23601:7:7",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_address_$",
                                            "typeString": "type(address)"
                                          },
                                          "typeName": "address"
                                        },
                                        "id": 4837,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "23601:13:7",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 4838,
                                        "name": "_amount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4796,
                                        "src": "23616:7:7",
                                        "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,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 4830,
                                            "name": "_token",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4794,
                                            "src": "23564:6:7",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "id": 4829,
                                          "name": "ERC20",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 14294,
                                          "src": "23558:5:7",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_ERC20_$14294_$",
                                            "typeString": "type(contract ERC20)"
                                          }
                                        },
                                        "id": 4831,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "23558:13:7",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_ERC20_$14294",
                                          "typeString": "contract ERC20"
                                        }
                                      },
                                      "id": 4832,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "safeTransferFrom",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 11016,
                                      "src": "23558:30:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ERC20_$14294_$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_contract$_ERC20_$14294_$",
                                        "typeString": "function (contract ERC20,address,address,uint256) returns (bool)"
                                      }
                                    },
                                    "id": 4839,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "23558:66:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 4840,
                                    "name": "ERROR_TOKEN_TRANSFER_FROM_REVERTED",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3621,
                                    "src": "23646:34:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_string_memory",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 4828,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    15156,
                                    15157
                                  ],
                                  "referencedDeclaration": 15157,
                                  "src": "23529:7:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 4841,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "23529:169:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 4842,
                              "nodeType": "ExpressionStatement",
                              "src": "23529:169:7"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4850,
                                  "name": "vault",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3697,
                                  "src": "23842:5:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Vault_$7857",
                                    "typeString": "contract Vault"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4851,
                                  "name": "_amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4796,
                                  "src": "23849:7:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_Vault_$7857",
                                    "typeString": "contract Vault"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 4847,
                                      "name": "_token",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4794,
                                      "src": "23822:6:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 4846,
                                    "name": "ERC20",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 14294,
                                    "src": "23816:5:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_ERC20_$14294_$",
                                      "typeString": "type(contract ERC20)"
                                    }
                                  },
                                  "id": 4848,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "23816:13:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ERC20_$14294",
                                    "typeString": "contract ERC20"
                                  }
                                },
                                "id": 4849,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "safeApprove",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 11044,
                                "src": "23816:25:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ERC20_$14294_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_contract$_ERC20_$14294_$",
                                  "typeString": "function (contract ERC20,address,uint256) returns (bool)"
                                }
                              },
                              "id": 4852,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "23816:41:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4853,
                              "name": "ERROR_TOKEN_APPROVE_FAILED",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3624,
                              "src": "23859:26:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_string_memory",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 4845,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              15156,
                              15157
                            ],
                            "referencedDeclaration": 15157,
                            "src": "23808:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4854,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23808:78:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4855,
                        "nodeType": "ExpressionStatement",
                        "src": "23808:78:7"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4859,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4794,
                              "src": "23959:6:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4860,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4796,
                              "src": "23967:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4856,
                              "name": "vault",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3697,
                              "src": "23945:5:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Vault_$7857",
                                "typeString": "contract Vault"
                              }
                            },
                            "id": 4858,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "deposit",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7709,
                            "src": "23945:13:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_payable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256) payable external"
                            }
                          },
                          "id": 4861,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23945:30:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4862,
                        "nodeType": "ExpressionStatement",
                        "src": "23945:30:7"
                      }
                    ]
                  },
                  "id": 4864,
                  "nodeType": "IfStatement",
                  "src": "23082:904:7",
                  "trueBody": {
                    "id": 4826,
                    "nodeType": "Block",
                    "src": "23101:67:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4822,
                              "name": "ETH",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10661,
                              "src": "23144:3:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4823,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4796,
                              "src": "23149:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 4820,
                                "name": "_amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4796,
                                "src": "23135:7:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4815,
                                  "name": "vault",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3697,
                                  "src": "23115:5:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Vault_$7857",
                                    "typeString": "contract Vault"
                                  }
                                },
                                "id": 4818,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "deposit",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 7709,
                                "src": "23115:13:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_payable$_t_address_$_t_uint256_$returns$__$",
                                  "typeString": "function (address,uint256) payable external"
                                }
                              },
                              "id": 4819,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "value",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "23115:19:7",
                              "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": 4821,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "23115:28:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_payable$_t_address_$_t_uint256_$returns$__$value",
                              "typeString": "function (address,uint256) payable external"
                            }
                          },
                          "id": 4824,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23115:42:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4825,
                        "nodeType": "ExpressionStatement",
                        "src": "23115:42:7"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 4866,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_deposit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4803,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4794,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 4866,
                  "src": "22836:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4793,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "22836:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4796,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4866,
                  "src": "22852:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4795,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22852:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4798,
                  "name": "_reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 4866,
                  "src": "22869:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 4797,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "22869:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4800,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 4866,
                  "src": "22888:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4799,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "22888:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4802,
                  "name": "_isExternalDeposit",
                  "nodeType": "VariableDeclaration",
                  "scope": 4866,
                  "src": "22905:23:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4801,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "22905:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22835:94:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4804,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "22939:0:7"
            },
            "scope": 5528,
            "src": "22818:1174:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4941,
              "nodeType": "Block",
              "src": "24070:920:7",
              "statements": [
                {
                  "assignments": [
                    4874
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4874,
                      "name": "payment",
                      "nodeType": "VariableDeclaration",
                      "scope": 4942,
                      "src": "24080:32:7",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                        "typeString": "struct Finance.ScheduledPayment"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 4873,
                        "name": "ScheduledPayment",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3649,
                        "src": "24080:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4878,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 4875,
                      "name": "scheduledPayments",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3703,
                      "src": "24115:17:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ScheduledPayment_$3649_storage_$",
                        "typeString": "mapping(uint256 => struct Finance.ScheduledPayment storage ref)"
                      }
                    },
                    "id": 4877,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 4876,
                      "name": "_paymentId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4868,
                      "src": "24133:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "24115:29:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage",
                      "typeString": "struct Finance.ScheduledPayment storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24080:64:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4882,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "24162:17:7",
                        "subExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4880,
                            "name": "payment",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4874,
                            "src": "24163:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                              "typeString": "struct Finance.ScheduledPayment storage pointer"
                            }
                          },
                          "id": 4881,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "inactive",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3638,
                          "src": "24163:16:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4883,
                        "name": "ERROR_PAYMENT_INACTIVE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3627,
                        "src": "24181:22:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4879,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "24154:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4884,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24154:50:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4885,
                  "nodeType": "ExpressionStatement",
                  "src": "24154:50:7"
                },
                {
                  "assignments": [
                    4887
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4887,
                      "name": "paid",
                      "nodeType": "VariableDeclaration",
                      "scope": 4942,
                      "src": "24215:11:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 4886,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "24215:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4889,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 4888,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "24229:1:7",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24215:15:7"
                },
                {
                  "body": {
                    "id": 4937,
                    "nodeType": "Block",
                    "src": "24337:625:7",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "id": 4906,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "24355:47:7",
                          "subExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4901,
                                  "name": "payment",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4874,
                                  "src": "24372:7:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                                    "typeString": "struct Finance.ScheduledPayment storage pointer"
                                  }
                                },
                                "id": 4902,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "token",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3632,
                                "src": "24372:13:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4903,
                                  "name": "payment",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4874,
                                  "src": "24387:7:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                                    "typeString": "struct Finance.ScheduledPayment storage pointer"
                                  }
                                },
                                "id": 4904,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "amount",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3640,
                                "src": "24387:14:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 4900,
                              "name": "_canMakePayment",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5354,
                              "src": "24356:15:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
                                "typeString": "function (address,uint256) view returns (bool)"
                              }
                            },
                            "id": 4905,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "24356:46:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 4913,
                        "nodeType": "IfStatement",
                        "src": "24351:140:7",
                        "trueBody": {
                          "id": 4912,
                          "nodeType": "Block",
                          "src": "24404:87:7",
                          "statements": [
                            {
                              "eventCall": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 4908,
                                    "name": "_paymentId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4868,
                                    "src": "24442:10:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 4907,
                                  "name": "PaymentFailure",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3769,
                                  "src": "24427:14:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256)"
                                  }
                                },
                                "id": 4909,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "24427:26:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 4910,
                              "nodeType": "EmitStatement",
                              "src": "24422:31:7"
                            },
                            {
                              "id": 4911,
                              "nodeType": "Break",
                              "src": "24471:5:7"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4918,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4914,
                              "name": "payment",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4874,
                              "src": "24583:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                                "typeString": "struct Finance.ScheduledPayment storage pointer"
                              }
                            },
                            "id": 4916,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "executions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3648,
                            "src": "24583:18:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 4917,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "24605:1:7",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "24583:23:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "id": 4919,
                        "nodeType": "ExpressionStatement",
                        "src": "24583:23:7"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4922,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 4920,
                            "name": "paid",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4887,
                            "src": "24620:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 4921,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "24628:1:7",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "24620:9:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "id": 4923,
                        "nodeType": "ExpressionStatement",
                        "src": "24620:9:7"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4925,
                                "name": "payment",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4874,
                                "src": "24774:7:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                                  "typeString": "struct Finance.ScheduledPayment storage pointer"
                                }
                              },
                              "id": 4926,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "token",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3632,
                              "src": "24774:13:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4927,
                                "name": "payment",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4874,
                                "src": "24805:7:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                                  "typeString": "struct Finance.ScheduledPayment storage pointer"
                                }
                              },
                              "id": 4928,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "receiver",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3634,
                              "src": "24805:16:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4929,
                                "name": "payment",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4874,
                                "src": "24839:7:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                                  "typeString": "struct Finance.ScheduledPayment storage pointer"
                                }
                              },
                              "id": 4930,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "amount",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3640,
                              "src": "24839:14:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4931,
                              "name": "_paymentId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4868,
                              "src": "24871:10:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4932,
                                "name": "payment",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4874,
                                "src": "24899:7:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                                  "typeString": "struct Finance.ScheduledPayment storage pointer"
                                }
                              },
                              "id": 4933,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "executions",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3648,
                              "src": "24899:18:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "",
                              "id": 4934,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "24935:2:7",
                              "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": 4924,
                            "name": "_unsafeMakePaymentTransaction",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5044,
                            "src": "24727:29:7",
                            "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": 4935,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "24727:224:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4936,
                        "nodeType": "ExpressionStatement",
                        "src": "24727:224:7"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 4899,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "id": 4895,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4891,
                            "name": "_paymentId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4868,
                            "src": "24264:10:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 4890,
                          "name": "_nextPaymentTime",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5452,
                          "src": "24247:16:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint64_$",
                            "typeString": "function (uint256) view returns (uint64)"
                          }
                        },
                        "id": 4892,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "24247:28:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 4893,
                          "name": "getTimestamp64",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11199,
                          "src": "24279:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                            "typeString": "function () view returns (uint64)"
                          }
                        },
                        "id": 4894,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "24279:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "src": "24247:48:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 4898,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 4896,
                        "name": "paid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4887,
                        "src": "24299:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 4897,
                        "name": "MAX_SCHEDULED_PAYMENTS_PER_TX",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3550,
                        "src": "24306:29:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "24299:36:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "24247:88:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4938,
                  "nodeType": "WhileStatement",
                  "src": "24240:722:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4939,
                    "name": "paid",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4887,
                    "src": "24979:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 4872,
                  "id": 4940,
                  "nodeType": "Return",
                  "src": "24972:11:7"
                }
              ]
            },
            "documentation": null,
            "id": 4942,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_executePayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4869,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4868,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4942,
                  "src": "24023:18:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4867,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24023:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24022:20:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4872,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4871,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4942,
                  "src": "24061:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4870,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24061:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24060:9:7"
            },
            "scope": 5528,
            "src": "23998:992:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4975,
              "nodeType": "Block",
              "src": "25061:300:7",
              "statements": [
                {
                  "assignments": [
                    4948
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4948,
                      "name": "paid",
                      "nodeType": "VariableDeclaration",
                      "scope": 4976,
                      "src": "25071:12:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4947,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "25071:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4952,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4950,
                        "name": "_paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4944,
                        "src": "25102:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4949,
                      "name": "_executePayment",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4942,
                      "src": "25086:15:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) returns (uint256)"
                      }
                    },
                    "id": 4951,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25086:27:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25071:42:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4955,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4953,
                      "name": "paid",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4948,
                      "src": "25127:4:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 4954,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25135:1:7",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "25127:9:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4974,
                  "nodeType": "IfStatement",
                  "src": "25123:232:7",
                  "trueBody": {
                    "id": 4973,
                    "nodeType": "Block",
                    "src": "25138:217:7",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          "id": 4961,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 4957,
                                "name": "_paymentId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4944,
                                "src": "25173:10:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 4956,
                              "name": "_nextPaymentTime",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5452,
                              "src": "25156:16:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint64_$",
                                "typeString": "function (uint256) view returns (uint64)"
                              }
                            },
                            "id": 4958,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "25156:28:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 4959,
                              "name": "getTimestamp64",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11199,
                              "src": "25188:14:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                                "typeString": "function () view returns (uint64)"
                              }
                            },
                            "id": 4960,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "25188:16:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "25156:48:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 4971,
                          "nodeType": "Block",
                          "src": "25278:67:7",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 4968,
                                    "name": "ERROR_EXECUTE_PAYMENT_TIME",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3615,
                                    "src": "25303:26:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 4967,
                                  "name": "revert",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    15158,
                                    15159
                                  ],
                                  "referencedDeclaration": 15159,
                                  "src": "25296:6:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (string memory) pure"
                                  }
                                },
                                "id": 4969,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "25296:34:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 4970,
                              "nodeType": "ExpressionStatement",
                              "src": "25296:34:7"
                            }
                          ]
                        },
                        "id": 4972,
                        "nodeType": "IfStatement",
                        "src": "25152:193:7",
                        "trueBody": {
                          "id": 4966,
                          "nodeType": "Block",
                          "src": "25206:66:7",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 4963,
                                    "name": "ERROR_EXECUTE_PAYMENT_NUM",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3612,
                                    "src": "25231:25:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 4962,
                                  "name": "revert",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    15158,
                                    15159
                                  ],
                                  "referencedDeclaration": 15159,
                                  "src": "25224:6:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (string memory) pure"
                                  }
                                },
                                "id": 4964,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "25224:33:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 4965,
                              "nodeType": "ExpressionStatement",
                              "src": "25224:33:7"
                            }
                          ]
                        }
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 4976,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_executePaymentAtLeastOnce",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4945,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4944,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4976,
                  "src": "25032:18:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4943,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25032:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25031:20:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4946,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "25061:0:7"
            },
            "scope": 5528,
            "src": "24996:365:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5009,
              "nodeType": "Block",
              "src": "25598:204:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4996,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4993,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4978,
                              "src": "25636:6:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 4992,
                            "name": "_getRemainingBudget",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5410,
                            "src": "25616:19:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view returns (uint256)"
                            }
                          },
                          "id": 4994,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25616:27:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 4995,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4982,
                          "src": "25647:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "25616:38:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4997,
                        "name": "ERROR_REMAINING_BUDGET",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3630,
                        "src": "25656:22:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4991,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "25608:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4998,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25608:71:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4999,
                  "nodeType": "ExpressionStatement",
                  "src": "25608:71:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5001,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4978,
                        "src": "25719:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5002,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4980,
                        "src": "25727:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5003,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4982,
                        "src": "25738:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5004,
                        "name": "_paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4984,
                        "src": "25747:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5005,
                        "name": "_paymentExecutionNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4986,
                        "src": "25759:23:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5006,
                        "name": "_reference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4988,
                        "src": "25784:10:7",
                        "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_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 5000,
                      "name": "_unsafeMakePaymentTransaction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5044,
                      "src": "25689:29:7",
                      "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": 5007,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25689:106:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5008,
                  "nodeType": "ExpressionStatement",
                  "src": "25689:106:7"
                }
              ]
            },
            "documentation": null,
            "id": 5010,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_makePaymentTransaction",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4989,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4978,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 5010,
                  "src": "25409:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4977,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "25409:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4980,
                  "name": "_receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 5010,
                  "src": "25433:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4979,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "25433:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4982,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 5010,
                  "src": "25460:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4981,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25460:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4984,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5010,
                  "src": "25485:18:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4983,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25485:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4986,
                  "name": "_paymentExecutionNumber",
                  "nodeType": "VariableDeclaration",
                  "scope": 5010,
                  "src": "25513:30:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4985,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "25513:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4988,
                  "name": "_reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 5010,
                  "src": "25553:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 4987,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "25553:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25399:177:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 4990,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "25598:0:7"
            },
            "scope": 5528,
            "src": "25367:435:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5043,
              "nodeType": "Block",
              "src": "26183:266:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 5026,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "26225:5:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      },
                      {
                        "argumentTypes": null,
                        "id": 5027,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5012,
                        "src": "26244:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5028,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5014,
                        "src": "26264:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5029,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5016,
                        "src": "26287:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5030,
                        "name": "_paymentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5018,
                        "src": "26308:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5031,
                        "name": "_paymentExecutionNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5020,
                        "src": "26332:23:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5032,
                        "name": "_reference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5022,
                        "src": "26369:10:7",
                        "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": 5025,
                      "name": "_recordTransaction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5267,
                      "src": "26193:18:7",
                      "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": 5033,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26193:196:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5034,
                  "nodeType": "ExpressionStatement",
                  "src": "26193:196:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5038,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5012,
                        "src": "26415:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5039,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5014,
                        "src": "26423:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5040,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5016,
                        "src": "26434:7:7",
                        "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": 5035,
                        "name": "vault",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3697,
                        "src": "26400:5:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vault_$7857",
                          "typeString": "contract Vault"
                        }
                      },
                      "id": 5037,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7765,
                      "src": "26400:14:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256) external"
                      }
                    },
                    "id": 5041,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26400:42:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5042,
                  "nodeType": "ExpressionStatement",
                  "src": "26400:42:7"
                }
              ]
            },
            "documentation": "@dev Unsafe version of _makePaymentTransaction that assumes you have already checked the\n     remaining budget",
            "id": 5044,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_unsafeMakePaymentTransaction",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5023,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5012,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 5044,
                  "src": "25994:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5011,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "25994:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5014,
                  "name": "_receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 5044,
                  "src": "26018:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5013,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "26018:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5016,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 5044,
                  "src": "26045:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5015,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26045:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5018,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5044,
                  "src": "26070:18:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5017,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26070:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5020,
                  "name": "_paymentExecutionNumber",
                  "nodeType": "VariableDeclaration",
                  "scope": 5044,
                  "src": "26098:30:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 5019,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "26098:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5022,
                  "name": "_reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 5044,
                  "src": "26138:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5021,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "26138:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25984:177:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 5024,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26183:0:7"
            },
            "scope": 5528,
            "src": "25946:503:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5102,
              "nodeType": "Block",
              "src": "26528:704:7",
              "statements": [
                {
                  "assignments": [
                    5052
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5052,
                      "name": "newPeriodId",
                      "nodeType": "VariableDeclaration",
                      "scope": 5103,
                      "src": "26631:18:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 5051,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "26631:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5055,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 5054,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "++",
                    "prefix": false,
                    "src": "26652:15:7",
                    "subExpression": {
                      "argumentTypes": null,
                      "id": 5053,
                      "name": "periodsLength",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3717,
                      "src": "26652:13:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26631:36:7"
                },
                {
                  "assignments": [
                    5057
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5057,
                      "name": "period",
                      "nodeType": "VariableDeclaration",
                      "scope": 5103,
                      "src": "26678:21:7",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                        "typeString": "struct Finance.Period"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5056,
                        "name": "Period",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3684,
                        "src": "26678:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                          "typeString": "struct Finance.Period"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5061,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 5058,
                      "name": "periods",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3715,
                      "src": "26702:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$3684_storage_$",
                        "typeString": "mapping(uint64 => struct Finance.Period storage ref)"
                      }
                    },
                    "id": 5060,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 5059,
                      "name": "newPeriodId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5052,
                      "src": "26710:11:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "26702:20:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Period_$3684_storage",
                      "typeString": "struct Finance.Period storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26678:44:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5066,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5062,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5057,
                        "src": "26732:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                          "typeString": "struct Finance.Period storage pointer"
                        }
                      },
                      "id": 5064,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "startTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3673,
                      "src": "26732:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5065,
                      "name": "_startTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5046,
                      "src": "26751:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "26732:29:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 5067,
                  "nodeType": "ExpressionStatement",
                  "src": "26732:29:7"
                },
                {
                  "assignments": [
                    5069
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5069,
                      "name": "endTime",
                      "nodeType": "VariableDeclaration",
                      "scope": 5103,
                      "src": "26944:14:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 5068,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "26944:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5076,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 5075,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "id": 5073,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 5070,
                        "name": "_startTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5046,
                        "src": "26961:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5071,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3699,
                          "src": "26974:8:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$3695_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 5072,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "periodDuration",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3686,
                        "src": "26974:23:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "src": "26961:36:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 5074,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27000:1:7",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "26961:40:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26944:57:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 5079,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5077,
                      "name": "endTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5069,
                      "src": "27015:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 5078,
                      "name": "_startTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5046,
                      "src": "27025:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "27015:20:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5085,
                  "nodeType": "IfStatement",
                  "src": "27011:85:7",
                  "trueBody": {
                    "id": 5084,
                    "nodeType": "Block",
                    "src": "27037:59:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5082,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5080,
                            "name": "endTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "27065:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 5081,
                            "name": "MAX_UINT64",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3562,
                            "src": "27075:10:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "27065:20:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "id": 5083,
                        "nodeType": "ExpressionStatement",
                        "src": "27065:20:7"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5090,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5086,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5057,
                        "src": "27105:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                          "typeString": "struct Finance.Period storage pointer"
                        }
                      },
                      "id": 5088,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "endTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3675,
                      "src": "27105:14:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5089,
                      "name": "endTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5069,
                      "src": "27122:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "27105:24:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 5091,
                  "nodeType": "ExpressionStatement",
                  "src": "27105:24:7"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5093,
                        "name": "newPeriodId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5052,
                        "src": "27155:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5094,
                          "name": "period",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5057,
                          "src": "27168:6:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                            "typeString": "struct Finance.Period storage pointer"
                          }
                        },
                        "id": 5095,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "startTime",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3673,
                        "src": "27168:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5096,
                          "name": "period",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5057,
                          "src": "27186:6:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                            "typeString": "struct Finance.Period storage pointer"
                          }
                        },
                        "id": 5097,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "endTime",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3675,
                        "src": "27186:14:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 5092,
                      "name": "NewPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3725,
                      "src": "27145:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint64_$_t_uint64_$_t_uint64_$returns$__$",
                        "typeString": "function (uint64,uint64,uint64)"
                      }
                    },
                    "id": 5098,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27145:56:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5099,
                  "nodeType": "EmitStatement",
                  "src": "27140:61:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5100,
                    "name": "period",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5057,
                    "src": "27219:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                      "typeString": "struct Finance.Period storage pointer"
                    }
                  },
                  "functionReturnParameters": 5050,
                  "id": 5101,
                  "nodeType": "Return",
                  "src": "27212:13:7"
                }
              ]
            },
            "documentation": null,
            "id": 5103,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_newPeriod",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5047,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5046,
                  "name": "_startTime",
                  "nodeType": "VariableDeclaration",
                  "scope": 5103,
                  "src": "26475:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 5045,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "26475:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26474:19:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 5050,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5049,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5103,
                  "src": "26512:6:7",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                    "typeString": "struct Finance.Period"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5048,
                    "name": "Period",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3684,
                    "src": "26512:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                      "typeString": "struct Finance.Period"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26511:16:7"
            },
            "scope": 5528,
            "src": "26455:777:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5124,
              "nodeType": "Block",
              "src": "27402:288:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "74727565",
                        "id": 5115,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "27444:4:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "argumentTypes": null,
                        "id": 5116,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5105,
                        "src": "27486:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5117,
                        "name": "_sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5107,
                        "src": "27506:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5118,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5109,
                        "src": "27527:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5119,
                        "name": "NO_SCHEDULED_PAYMENT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3544,
                        "src": "27548:20:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 5120,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "27619:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "id": 5121,
                        "name": "_reference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5111,
                        "src": "27663:10:7",
                        "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": 5114,
                      "name": "_recordTransaction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5267,
                      "src": "27412:18:7",
                      "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": 5122,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27412:271:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5123,
                  "nodeType": "ExpressionStatement",
                  "src": "27412:271:7"
                }
              ]
            },
            "documentation": null,
            "id": 5125,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_recordIncomingTransaction",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5112,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5105,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 5125,
                  "src": "27283:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5104,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "27283:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5107,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 5125,
                  "src": "27307:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5106,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "27307:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5109,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 5125,
                  "src": "27332:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5108,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27332:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5111,
                  "name": "_reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 5125,
                  "src": "27357:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5110,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "27357:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27273:107:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 5113,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27402:0:7"
            },
            "scope": 5528,
            "src": "27238:452:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5266,
              "nodeType": "Block",
              "src": "27944:1091:7",
              "statements": [
                {
                  "assignments": [
                    5143
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5143,
                      "name": "periodId",
                      "nodeType": "VariableDeclaration",
                      "scope": 5267,
                      "src": "27954:15:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 5142,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "27954:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5146,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 5144,
                      "name": "_currentPeriodId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5364,
                      "src": "27972:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                        "typeString": "function () view returns (uint64)"
                      }
                    },
                    "id": 5145,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27972:18:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "27954:36:7"
                },
                {
                  "assignments": [
                    5148
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5148,
                      "name": "tokenStatement",
                      "nodeType": "VariableDeclaration",
                      "scope": 5267,
                      "src": "28000:37:7",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TokenStatement_$3671_storage_ptr",
                        "typeString": "struct Finance.TokenStatement"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5147,
                        "name": "TokenStatement",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3671,
                        "src": "28000:14:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenStatement_$3671_storage_ptr",
                          "typeString": "struct Finance.TokenStatement"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5155,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 5149,
                          "name": "periods",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3715,
                          "src": "28040:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$3684_storage_$",
                            "typeString": "mapping(uint64 => struct Finance.Period storage ref)"
                          }
                        },
                        "id": 5151,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 5150,
                          "name": "periodId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5143,
                          "src": "28048:8:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "28040:17:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$3684_storage",
                          "typeString": "struct Finance.Period storage ref"
                        }
                      },
                      "id": 5152,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "tokenStatement",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3683,
                      "src": "28040:32:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TokenStatement_$3671_storage_$",
                        "typeString": "mapping(address => struct Finance.TokenStatement storage ref)"
                      }
                    },
                    "id": 5154,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 5153,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5129,
                      "src": "28073:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "28040:40:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TokenStatement_$3671_storage",
                      "typeString": "struct Finance.TokenStatement storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28000:80:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 5156,
                    "name": "_incoming",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5127,
                    "src": "28094:9:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 5178,
                    "nodeType": "Block",
                    "src": "28194:87:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5176,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 5168,
                              "name": "tokenStatement",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5148,
                              "src": "28208:14:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TokenStatement_$3671_storage_ptr",
                                "typeString": "struct Finance.TokenStatement storage pointer"
                              }
                            },
                            "id": 5170,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "expenses",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3668,
                            "src": "28208:23:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 5174,
                                "name": "_amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5133,
                                "src": "28262:7:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 5171,
                                  "name": "tokenStatement",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5148,
                                  "src": "28234:14:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TokenStatement_$3671_storage_ptr",
                                    "typeString": "struct Finance.TokenStatement storage pointer"
                                  }
                                },
                                "id": 5172,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "expenses",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3668,
                                "src": "28234:23:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5173,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14042,
                              "src": "28234:27:7",
                              "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": 5175,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "28234:36:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "28208:62:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5177,
                        "nodeType": "ExpressionStatement",
                        "src": "28208:62:7"
                      }
                    ]
                  },
                  "id": 5179,
                  "nodeType": "IfStatement",
                  "src": "28090:191:7",
                  "trueBody": {
                    "id": 5167,
                    "nodeType": "Block",
                    "src": "28105:83:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5165,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 5157,
                              "name": "tokenStatement",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5148,
                              "src": "28119:14:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TokenStatement_$3671_storage_ptr",
                                "typeString": "struct Finance.TokenStatement storage pointer"
                              }
                            },
                            "id": 5159,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "income",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3670,
                            "src": "28119:21:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 5163,
                                "name": "_amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5133,
                                "src": "28169:7:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 5160,
                                  "name": "tokenStatement",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5148,
                                  "src": "28143:14:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TokenStatement_$3671_storage_ptr",
                                    "typeString": "struct Finance.TokenStatement storage pointer"
                                  }
                                },
                                "id": 5161,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "income",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3670,
                                "src": "28143:21:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5162,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14042,
                              "src": "28143:25:7",
                              "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": 5164,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "28143:34:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "28119:58:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5166,
                        "nodeType": "ExpressionStatement",
                        "src": "28119:58:7"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    5181
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5181,
                      "name": "transactionId",
                      "nodeType": "VariableDeclaration",
                      "scope": 5267,
                      "src": "28291:21:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5180,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "28291:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5184,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 5183,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "++",
                    "prefix": false,
                    "src": "28315:23:7",
                    "subExpression": {
                      "argumentTypes": null,
                      "id": 5182,
                      "name": "transactionsNextIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3711,
                      "src": "28315:21:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28291:47:7"
                },
                {
                  "assignments": [
                    5186
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5186,
                      "name": "transaction",
                      "nodeType": "VariableDeclaration",
                      "scope": 5267,
                      "src": "28349:31:7",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                        "typeString": "struct Finance.Transaction"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5185,
                        "name": "Transaction",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3666,
                        "src": "28349:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5190,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 5187,
                      "name": "transactions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3709,
                      "src": "28383:12:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Transaction_$3666_storage_$",
                        "typeString": "mapping(uint256 => struct Finance.Transaction storage ref)"
                      }
                    },
                    "id": 5189,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 5188,
                      "name": "transactionId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5181,
                      "src": "28396:13:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "28383:27:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Transaction_$3666_storage",
                      "typeString": "struct Finance.Transaction storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28349:61:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5195,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5191,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5186,
                        "src": "28420:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 5193,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "token",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3651,
                      "src": "28420:17:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5194,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5129,
                      "src": "28440:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "28420:26:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 5196,
                  "nodeType": "ExpressionStatement",
                  "src": "28420:26:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5201,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5197,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5186,
                        "src": "28456:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 5199,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "entity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3653,
                      "src": "28456:18:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5200,
                      "name": "_entity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5131,
                      "src": "28477:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "28456:28:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 5202,
                  "nodeType": "ExpressionStatement",
                  "src": "28456:28:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5207,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5203,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5186,
                        "src": "28494:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 5205,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "isIncoming",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3655,
                      "src": "28494:22:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5206,
                      "name": "_incoming",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5127,
                      "src": "28519:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "28494:34:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5208,
                  "nodeType": "ExpressionStatement",
                  "src": "28494:34:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5213,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5209,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5186,
                        "src": "28538:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 5211,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3657,
                      "src": "28538:18:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5212,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5133,
                      "src": "28559:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "28538:28:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5214,
                  "nodeType": "ExpressionStatement",
                  "src": "28538:28:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5219,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5215,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5186,
                        "src": "28576:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 5217,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "paymentId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3659,
                      "src": "28576:21:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5218,
                      "name": "_paymentId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5135,
                      "src": "28600:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "28576:34:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5220,
                  "nodeType": "ExpressionStatement",
                  "src": "28576:34:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5225,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5221,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5186,
                        "src": "28620:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 5223,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "paymentExecutionNumber",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3661,
                      "src": "28620:34:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5224,
                      "name": "_paymentExecutionNumber",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5137,
                      "src": "28657:23:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "28620:60:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 5226,
                  "nodeType": "ExpressionStatement",
                  "src": "28620:60:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5232,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5227,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5186,
                        "src": "28690:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 5229,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "date",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3663,
                      "src": "28690:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 5230,
                        "name": "getTimestamp64",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11199,
                        "src": "28709:14:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                          "typeString": "function () view returns (uint64)"
                        }
                      },
                      "id": 5231,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "28709:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "28690:35:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 5233,
                  "nodeType": "ExpressionStatement",
                  "src": "28690:35:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5238,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5234,
                        "name": "transaction",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5186,
                        "src": "28735:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Transaction_$3666_storage_ptr",
                          "typeString": "struct Finance.Transaction storage pointer"
                        }
                      },
                      "id": 5236,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "periodId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3665,
                      "src": "28735:20:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5237,
                      "name": "periodId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5143,
                      "src": "28758:8:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "28735:31:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 5239,
                  "nodeType": "ExpressionStatement",
                  "src": "28735:31:7"
                },
                {
                  "assignments": [
                    5241
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5241,
                      "name": "period",
                      "nodeType": "VariableDeclaration",
                      "scope": 5267,
                      "src": "28777:21:7",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                        "typeString": "struct Finance.Period"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5240,
                        "name": "Period",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3684,
                        "src": "28777:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                          "typeString": "struct Finance.Period"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5245,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 5242,
                      "name": "periods",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3715,
                      "src": "28801:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$3684_storage_$",
                        "typeString": "mapping(uint64 => struct Finance.Period storage ref)"
                      }
                    },
                    "id": 5244,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 5243,
                      "name": "periodId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5143,
                      "src": "28809:8:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "28801:17:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Period_$3684_storage",
                      "typeString": "struct Finance.Period storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28777:41:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5249,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5246,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5241,
                        "src": "28832:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                          "typeString": "struct Finance.Period storage pointer"
                        }
                      },
                      "id": 5247,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "firstTransactionId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3677,
                      "src": "28832:25:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 5248,
                      "name": "NO_TRANSACTION",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3547,
                      "src": "28861:14:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "28832:43:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5257,
                  "nodeType": "IfStatement",
                  "src": "28828:115:7",
                  "trueBody": {
                    "id": 5256,
                    "nodeType": "Block",
                    "src": "28877:66:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5254,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 5250,
                              "name": "period",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5241,
                              "src": "28891:6:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                                "typeString": "struct Finance.Period storage pointer"
                              }
                            },
                            "id": 5252,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "firstTransactionId",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3677,
                            "src": "28891:25:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 5253,
                            "name": "transactionId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5181,
                            "src": "28919:13:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "28891:41:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5255,
                        "nodeType": "ExpressionStatement",
                        "src": "28891:41:7"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5259,
                        "name": "transactionId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5181,
                        "src": "28973:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5260,
                        "name": "_incoming",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5127,
                        "src": "28988:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5261,
                        "name": "_entity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5131,
                        "src": "28999:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5262,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5133,
                        "src": "29008:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5263,
                        "name": "_reference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5139,
                        "src": "29017:10:7",
                        "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": 5258,
                      "name": "NewTransaction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3755,
                      "src": "28958:14:7",
                      "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": 5264,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "28958:70:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5265,
                  "nodeType": "EmitStatement",
                  "src": "28953:75:7"
                }
              ]
            },
            "documentation": null,
            "id": 5267,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_recordTransaction",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5140,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5127,
                  "name": "_incoming",
                  "nodeType": "VariableDeclaration",
                  "scope": 5267,
                  "src": "27733:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5126,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "27733:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5129,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 5267,
                  "src": "27757:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5128,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "27757:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5131,
                  "name": "_entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 5267,
                  "src": "27781:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5130,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "27781:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5133,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 5267,
                  "src": "27806:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5132,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27806:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5135,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5267,
                  "src": "27831:18:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5134,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27831:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5137,
                  "name": "_paymentExecutionNumber",
                  "nodeType": "VariableDeclaration",
                  "scope": 5267,
                  "src": "27859:30:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 5136,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "27859:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5139,
                  "name": "_reference",
                  "nodeType": "VariableDeclaration",
                  "scope": 5267,
                  "src": "27899:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5138,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "27899:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27723:199:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 5141,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27944:0:7"
            },
            "scope": 5528,
            "src": "27696:1339:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5330,
              "nodeType": "Block",
              "src": "29137:1019:7",
              "statements": [
                {
                  "assignments": [
                    5275
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5275,
                      "name": "currentPeriod",
                      "nodeType": "VariableDeclaration",
                      "scope": 5331,
                      "src": "29147:28:7",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                        "typeString": "struct Finance.Period"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5274,
                        "name": "Period",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3684,
                        "src": "29147:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                          "typeString": "struct Finance.Period"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5280,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 5276,
                      "name": "periods",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3715,
                      "src": "29178:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$3684_storage_$",
                        "typeString": "mapping(uint64 => struct Finance.Period storage ref)"
                      }
                    },
                    "id": 5279,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 5277,
                        "name": "_currentPeriodId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5364,
                        "src": "29186:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                          "typeString": "function () view returns (uint64)"
                        }
                      },
                      "id": 5278,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "29186:18:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "29178:27:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Period_$3684_storage",
                      "typeString": "struct Finance.Period storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "29147:58:7"
                },
                {
                  "assignments": [
                    5282
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5282,
                      "name": "timestamp",
                      "nodeType": "VariableDeclaration",
                      "scope": 5331,
                      "src": "29215:16:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 5281,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "29215:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5285,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 5283,
                      "name": "getTimestamp64",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11199,
                      "src": "29234:14:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                        "typeString": "function () view returns (uint64)"
                      }
                    },
                    "id": 5284,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29234:16:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "29215:35:7"
                },
                {
                  "body": {
                    "id": 5326,
                    "nodeType": "Block",
                    "src": "29346:782:7",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          "id": 5292,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 5290,
                            "name": "_maxTransitions",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5269,
                            "src": "29364:15:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 5291,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "29383:1:7",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "29364:20:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 5296,
                        "nodeType": "IfStatement",
                        "src": "29360:215:7",
                        "trueBody": {
                          "id": 5295,
                          "nodeType": "Block",
                          "src": "29386:189:7",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "hexValue": "66616c7365",
                                "id": 5293,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "29555:5:7",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              "functionReturnParameters": 5273,
                              "id": 5294,
                              "nodeType": "Return",
                              "src": "29548:12:7"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5299,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5297,
                            "name": "_maxTransitions",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5269,
                            "src": "29651:15:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 5298,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "29670:1:7",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "29651:20:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "id": 5300,
                        "nodeType": "ExpressionStatement",
                        "src": "29651:20:7"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5304,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 5301,
                              "name": "currentPeriod",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5275,
                              "src": "29851:13:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                                "typeString": "struct Finance.Period storage pointer"
                              }
                            },
                            "id": 5302,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "firstTransactionId",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3677,
                            "src": "29851:32:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 5303,
                            "name": "NO_TRANSACTION",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3547,
                            "src": "29887:14:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "29851:50:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 5315,
                        "nodeType": "IfStatement",
                        "src": "29847:151:7",
                        "trueBody": {
                          "id": 5314,
                          "nodeType": "Block",
                          "src": "29903:95:7",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 5312,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 5305,
                                    "name": "currentPeriod",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5275,
                                    "src": "29921:13:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                                      "typeString": "struct Finance.Period storage pointer"
                                    }
                                  },
                                  "id": 5307,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "lastTransactionId",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3679,
                                  "src": "29921:31:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "31",
                                      "id": 5310,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "29981:1:7",
                                      "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": 5308,
                                      "name": "transactionsNextIndex",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3711,
                                      "src": "29955:21:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 5309,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sub",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 14017,
                                    "src": "29955:25:7",
                                    "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": 5311,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "29955:28:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "29921:62:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5313,
                              "nodeType": "ExpressionStatement",
                              "src": "29921:62:7"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5324,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5316,
                            "name": "currentPeriod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5275,
                            "src": "30061:13:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                              "typeString": "struct Finance.Period storage pointer"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 5321,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "30114:1:7",
                                    "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": 5318,
                                      "name": "currentPeriod",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5275,
                                      "src": "30088:13:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                                        "typeString": "struct Finance.Period storage pointer"
                                      }
                                    },
                                    "id": 5319,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "endTime",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3675,
                                    "src": "30088:21:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint64",
                                      "typeString": "uint64"
                                    }
                                  },
                                  "id": 5320,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "add",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 14184,
                                  "src": "30088:25:7",
                                  "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": 5322,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "30088:28:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              ],
                              "id": 5317,
                              "name": "_newPeriod",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5103,
                              "src": "30077:10:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_uint64_$returns$_t_struct$_Period_$3684_storage_ptr_$",
                                "typeString": "function (uint64) returns (struct Finance.Period storage pointer)"
                              }
                            },
                            "id": 5323,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "30077:40:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                              "typeString": "struct Finance.Period storage pointer"
                            }
                          },
                          "src": "30061:56:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                            "typeString": "struct Finance.Period storage pointer"
                          }
                        },
                        "id": 5325,
                        "nodeType": "ExpressionStatement",
                        "src": "30061:56:7"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 5289,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5286,
                      "name": "timestamp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5282,
                      "src": "29311:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5287,
                        "name": "currentPeriod",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5275,
                        "src": "29323:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Period_$3684_storage_ptr",
                          "typeString": "struct Finance.Period storage pointer"
                        }
                      },
                      "id": 5288,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "endTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3675,
                      "src": "29323:21:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "29311:33:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5327,
                  "nodeType": "WhileStatement",
                  "src": "29304:824:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 5328,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "30145:4:7",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 5273,
                  "id": 5329,
                  "nodeType": "Return",
                  "src": "30138:11:7"
                }
              ]
            },
            "documentation": null,
            "id": 5331,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_tryTransitionAccountingPeriod",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5270,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5269,
                  "name": "_maxTransitions",
                  "nodeType": "VariableDeclaration",
                  "scope": 5331,
                  "src": "29081:22:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 5268,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "29081:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "29080:24:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 5273,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5272,
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 5331,
                  "src": "29123:12:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5271,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "29123:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "29122:14:7"
            },
            "scope": 5528,
            "src": "29041:1115:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5353,
              "nodeType": "Block",
              "src": "30249:98:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 5351,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 5344,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5341,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5333,
                            "src": "30286:6:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 5340,
                          "name": "_getRemainingBudget",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5410,
                          "src": "30266:19:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view returns (uint256)"
                          }
                        },
                        "id": 5342,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "30266:27:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 5343,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5335,
                        "src": "30297:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "30266:38:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 5350,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5347,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5333,
                            "src": "30322:6:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5345,
                            "name": "vault",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3697,
                            "src": "30308:5:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Vault_$7857",
                              "typeString": "contract Vault"
                            }
                          },
                          "id": 5346,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balance",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7791,
                          "src": "30308:13:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view external returns (uint256)"
                          }
                        },
                        "id": 5348,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "30308:21:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 5349,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5335,
                        "src": "30333:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "30308:32:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "30266:74:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 5339,
                  "id": 5352,
                  "nodeType": "Return",
                  "src": "30259:81:7"
                }
              ]
            },
            "documentation": null,
            "id": 5354,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_canMakePayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5336,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5333,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 5354,
                  "src": "30187:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5332,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "30187:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5335,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 5354,
                  "src": "30203:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5334,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30203:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "30186:33:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 5339,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5338,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5354,
                  "src": "30243:4:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5337,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "30243:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "30242:6:7"
            },
            "scope": 5528,
            "src": "30162:185:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5363,
              "nodeType": "Block",
              "src": "30412:129:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 5361,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5359,
                      "name": "periodsLength",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3717,
                      "src": "30517:13:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 5360,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30533:1:7",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "30517:17:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 5358,
                  "id": 5362,
                  "nodeType": "Return",
                  "src": "30510:24:7"
                }
              ]
            },
            "documentation": null,
            "id": 5364,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_currentPeriodId",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5355,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "30378:2:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 5358,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5357,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5364,
                  "src": "30404:6:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 5356,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "30404:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "30403:8:7"
            },
            "scope": 5528,
            "src": "30353:188:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5409,
              "nodeType": "Block",
              "src": "30624:541:7",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 5375,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "30638:27:7",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5371,
                          "name": "settings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3699,
                          "src": "30639:8:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Settings_$3695_storage",
                            "typeString": "struct Finance.Settings storage ref"
                          }
                        },
                        "id": 5372,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hasBudget",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3694,
                        "src": "30639:18:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 5374,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 5373,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5366,
                        "src": "30658:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "30639:26:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5379,
                  "nodeType": "IfStatement",
                  "src": "30634:76:7",
                  "trueBody": {
                    "id": 5378,
                    "nodeType": "Block",
                    "src": "30667:43:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5376,
                          "name": "MAX_UINT256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3556,
                          "src": "30688:11:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5370,
                        "id": 5377,
                        "nodeType": "Return",
                        "src": "30681:18:7"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    5381
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5381,
                      "name": "budget",
                      "nodeType": "VariableDeclaration",
                      "scope": 5410,
                      "src": "30720:14:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5380,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "30720:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5386,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5382,
                        "name": "settings",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3699,
                        "src": "30737:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Settings_$3695_storage",
                          "typeString": "struct Finance.Settings storage ref"
                        }
                      },
                      "id": 5383,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "budgets",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3690,
                      "src": "30737:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 5385,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 5384,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5366,
                      "src": "30754:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "30737:24:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "30720:41:7"
                },
                {
                  "assignments": [
                    5388
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5388,
                      "name": "spent",
                      "nodeType": "VariableDeclaration",
                      "scope": 5410,
                      "src": "30771:13:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5387,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "30771:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5397,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 5389,
                            "name": "periods",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3715,
                            "src": "30787:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint64_$_t_struct$_Period_$3684_storage_$",
                              "typeString": "mapping(uint64 => struct Finance.Period storage ref)"
                            }
                          },
                          "id": 5392,
                          "indexExpression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 5390,
                              "name": "_currentPeriodId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5364,
                              "src": "30795:16:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                                "typeString": "function () view returns (uint64)"
                              }
                            },
                            "id": 5391,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "30795:18:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "30787:27:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Period_$3684_storage",
                            "typeString": "struct Finance.Period storage ref"
                          }
                        },
                        "id": 5393,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "tokenStatement",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3683,
                        "src": "30787:42:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TokenStatement_$3671_storage_$",
                          "typeString": "mapping(address => struct Finance.TokenStatement storage ref)"
                        }
                      },
                      "id": 5395,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 5394,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5366,
                        "src": "30830:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "30787:50:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TokenStatement_$3671_storage",
                        "typeString": "struct Finance.TokenStatement storage ref"
                      }
                    },
                    "id": 5396,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "expenses",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 3668,
                    "src": "30787:59:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "30771:75:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5400,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5398,
                      "name": "spent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5388,
                      "src": "31018:5:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 5399,
                      "name": "budget",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5381,
                      "src": "31027:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "31018:15:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5404,
                  "nodeType": "IfStatement",
                  "src": "31014:54:7",
                  "trueBody": {
                    "id": 5403,
                    "nodeType": "Block",
                    "src": "31035:33:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 5401,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "31056:1:7",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 5370,
                        "id": 5402,
                        "nodeType": "Return",
                        "src": "31049:8:7"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5407,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5405,
                      "name": "budget",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5381,
                      "src": "31144:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 5406,
                      "name": "spent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5388,
                      "src": "31153:5:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "31144:14:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 5370,
                  "id": 5408,
                  "nodeType": "Return",
                  "src": "31137:21:7"
                }
              ]
            },
            "documentation": null,
            "id": 5410,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_getRemainingBudget",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5367,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5366,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 5410,
                  "src": "30576:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5365,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "30576:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "30575:16:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 5370,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5369,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5410,
                  "src": "30615:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5368,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30615:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "30614:9:7"
            },
            "scope": 5528,
            "src": "30547:618:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5451,
              "nodeType": "Block",
              "src": "31248:488:7",
              "statements": [
                {
                  "assignments": [
                    5418
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5418,
                      "name": "payment",
                      "nodeType": "VariableDeclaration",
                      "scope": 5452,
                      "src": "31258:32:7",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                        "typeString": "struct Finance.ScheduledPayment"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5417,
                        "name": "ScheduledPayment",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3649,
                        "src": "31258:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5422,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 5419,
                      "name": "scheduledPayments",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3703,
                      "src": "31293:17:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ScheduledPayment_$3649_storage_$",
                        "typeString": "mapping(uint256 => struct Finance.ScheduledPayment storage ref)"
                      }
                    },
                    "id": 5421,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 5420,
                      "name": "_paymentId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5412,
                      "src": "31311:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "31293:29:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage",
                      "typeString": "struct Finance.ScheduledPayment storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31258:64:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 5427,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5423,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5418,
                        "src": "31337:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 5424,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "executions",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3648,
                      "src": "31337:18:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5425,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5418,
                        "src": "31359:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                          "typeString": "struct Finance.ScheduledPayment storage pointer"
                        }
                      },
                      "id": 5426,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "maxExecutions",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3646,
                      "src": "31359:21:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "31337:43:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5431,
                  "nodeType": "IfStatement",
                  "src": "31333:165:7",
                  "trueBody": {
                    "id": 5430,
                    "nodeType": "Block",
                    "src": "31382:116:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5428,
                          "name": "MAX_UINT64",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3562,
                          "src": "31403:10:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "functionReturnParameters": 5416,
                        "id": 5429,
                        "nodeType": "Return",
                        "src": "31396:17:7"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    5433
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5433,
                      "name": "increase",
                      "nodeType": "VariableDeclaration",
                      "scope": 5452,
                      "src": "31572:15:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 5432,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "31572:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5440,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5437,
                          "name": "payment",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5418,
                          "src": "31613:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                            "typeString": "struct Finance.ScheduledPayment storage pointer"
                          }
                        },
                        "id": 5438,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "interval",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3644,
                        "src": "31613:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5434,
                          "name": "payment",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5418,
                          "src": "31590:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                            "typeString": "struct Finance.ScheduledPayment storage pointer"
                          }
                        },
                        "id": 5435,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "executions",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3648,
                        "src": "31590:18:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "id": 5436,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14109,
                      "src": "31590:22:7",
                      "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": 5439,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31590:40:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31572:58:7"
                },
                {
                  "assignments": [
                    5442
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5442,
                      "name": "nextPayment",
                      "nodeType": "VariableDeclaration",
                      "scope": 5452,
                      "src": "31640:18:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 5441,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "31640:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5448,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5446,
                        "name": "increase",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5433,
                        "src": "31692:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5443,
                          "name": "payment",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5418,
                          "src": "31661:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ScheduledPayment_$3649_storage_ptr",
                            "typeString": "struct Finance.ScheduledPayment storage pointer"
                          }
                        },
                        "id": 5444,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "initialPaymentTime",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3642,
                        "src": "31661:26:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "id": 5445,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14184,
                      "src": "31661:30:7",
                      "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": 5447,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31661:40:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31640:61:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5449,
                    "name": "nextPayment",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5442,
                    "src": "31718:11:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 5416,
                  "id": 5450,
                  "nodeType": "Return",
                  "src": "31711:18:7"
                }
              ]
            },
            "documentation": null,
            "id": 5452,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_nextPaymentTime",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5413,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5412,
                  "name": "_paymentId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5452,
                  "src": "31197:18:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5411,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31197:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "31196:20:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 5416,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5415,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5452,
                  "src": "31240:6:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 5414,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "31240:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "31239:8:7"
            },
            "scope": 5528,
            "src": "31171:565:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5518,
              "nodeType": "Block",
              "src": "31885:169:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5476,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5470,
                      "name": "r",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5468,
                      "src": "31895:1:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[] memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "36",
                          "id": 5474,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "31913:1:7",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_6_by_1",
                            "typeString": "int_const 6"
                          },
                          "value": "6"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_6_by_1",
                            "typeString": "int_const 6"
                          }
                        ],
                        "id": 5473,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "NewExpression",
                        "src": "31899:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$",
                          "typeString": "function (uint256) pure returns (uint256[] memory)"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 5471,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "31903:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 5472,
                          "length": null,
                          "nodeType": "ArrayTypeName",
                          "src": "31903:9:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        }
                      },
                      "id": 5475,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "31899:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory",
                        "typeString": "uint256[] memory"
                      }
                    },
                    "src": "31895:20:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "id": 5477,
                  "nodeType": "ExpressionStatement",
                  "src": "31895:20:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5484,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5478,
                        "name": "r",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5468,
                        "src": "31925:1:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      "id": 5480,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 5479,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "31927:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "31925:4:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 5482,
                          "name": "_a",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5454,
                          "src": "31940:2:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 5481,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "31932:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 5483,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "31932:11:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "31925:18:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5485,
                  "nodeType": "ExpressionStatement",
                  "src": "31925:18:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5492,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5486,
                        "name": "r",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5468,
                        "src": "31953:1:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      "id": 5488,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 5487,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "31955:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "31953:4:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 5490,
                          "name": "_b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5456,
                          "src": "31968:2:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 5489,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "31960:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 5491,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "31960:11:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "31953:18:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5493,
                  "nodeType": "ExpressionStatement",
                  "src": "31953:18:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5498,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5494,
                        "name": "r",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5468,
                        "src": "31981:1:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      "id": 5496,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "32",
                        "id": 5495,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "31983:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "31981:4:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5497,
                      "name": "_c",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5458,
                      "src": "31988:2:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "31981:9:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5499,
                  "nodeType": "ExpressionStatement",
                  "src": "31981:9:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5504,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5500,
                        "name": "r",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5468,
                        "src": "32000:1:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      "id": 5502,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "33",
                        "id": 5501,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "32002:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_3_by_1",
                          "typeString": "int_const 3"
                        },
                        "value": "3"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "32000:4:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5503,
                      "name": "_d",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5460,
                      "src": "32007:2:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "32000:9:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5505,
                  "nodeType": "ExpressionStatement",
                  "src": "32000:9:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5510,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5506,
                        "name": "r",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5468,
                        "src": "32019:1:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      "id": 5508,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "34",
                        "id": 5507,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "32021:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_4_by_1",
                          "typeString": "int_const 4"
                        },
                        "value": "4"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "32019:4:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5509,
                      "name": "_e",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5462,
                      "src": "32026:2:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "32019:9:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5511,
                  "nodeType": "ExpressionStatement",
                  "src": "32019:9:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5516,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5512,
                        "name": "r",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5468,
                        "src": "32038:1:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      "id": 5514,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "35",
                        "id": 5513,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "32040:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_5_by_1",
                          "typeString": "int_const 5"
                        },
                        "value": "5"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "32038:4:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5515,
                      "name": "_f",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5464,
                      "src": "32045:2:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "32038:9:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5517,
                  "nodeType": "ExpressionStatement",
                  "src": "32038:9:7"
                }
              ]
            },
            "documentation": null,
            "id": 5519,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_arr",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5465,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5454,
                  "name": "_a",
                  "nodeType": "VariableDeclaration",
                  "scope": 5519,
                  "src": "31777:10:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5453,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "31777:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5456,
                  "name": "_b",
                  "nodeType": "VariableDeclaration",
                  "scope": 5519,
                  "src": "31789:10:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5455,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "31789:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5458,
                  "name": "_c",
                  "nodeType": "VariableDeclaration",
                  "scope": 5519,
                  "src": "31801:10:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5457,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31801:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5460,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 5519,
                  "src": "31813:10:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5459,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31813:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5462,
                  "name": "_e",
                  "nodeType": "VariableDeclaration",
                  "scope": 5519,
                  "src": "31825:10:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5461,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31825:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5464,
                  "name": "_f",
                  "nodeType": "VariableDeclaration",
                  "scope": 5519,
                  "src": "31837:10:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5463,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31837:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "31776:72:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 5469,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5468,
                  "name": "r",
                  "nodeType": "VariableDeclaration",
                  "scope": 5519,
                  "src": "31872:11:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 5466,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "31872:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5467,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "31872:9:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "31871:13:7"
            },
            "scope": 5528,
            "src": "31763:291:7",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5526,
              "nodeType": "Block",
              "src": "32213:22:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5524,
                    "name": "MAX_UINT64",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3562,
                    "src": "32222:10:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 5523,
                  "id": 5525,
                  "nodeType": "Return",
                  "src": "32215:17:7"
                }
              ]
            },
            "documentation": null,
            "id": 5527,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getMaxPeriodTransitions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5520,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "32179:2:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 5523,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5522,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5527,
                  "src": "32205:6:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 5521,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "32205:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "32204:8:7"
            },
            "scope": 5528,
            "src": "32147:88:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 5529,
        "src": "510:31727:7"
      }
    ],
    "src": "57:32181:7"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "2.0.1",
  "updatedAt": "2019-09-04T11:02:55.721Z"
}