{
  "contractName": "MockDgxDemurrageReporter",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "TOKEN_ADDRESS",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_initial_balance",
          "type": "uint256"
        },
        {
          "name": "_days_elapsed",
          "type": "uint256"
        }
      ],
      "name": "calculateDemurrage",
      "outputs": [
        {
          "name": "_demurrage_fees",
          "type": "uint256"
        },
        {
          "name": "_no_demurrage_fees",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "claimOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "last_demurrageable_balance",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "culmulative_demurrage_collected",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "start_of_report_period",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "last_payment_timestamp",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "exempted_accounts",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "pendingOwner",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "_token_address",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "previousOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipRenounced",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_account",
          "type": "address"
        }
      ],
      "name": "addExemptedAccount",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "updateDemurrageReporter",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_new_last_payment_timestamp",
          "type": "uint256"
        }
      ],
      "name": "changeLastPaymentTimestamp",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b50604051602080620014d88339810180604052810190808051906020019092919050505080806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504260078190555042600581905550620000df620000e6640100000000026401000000009004565b50620005f3565b620000f06200059c565b60008060055483600001516000018181525050620001296201518084620002676401000000000262000b8d179091906401000000009004565b92506200014462000315640100000000026401000000009004565b73ffffffffffffffffffffffffffffffffffffffff1663293f9a9c6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401608060405180830381600087803b158015620001a857600080fd5b505af1158015620001bd573d6000803e3d6000fd5b505050506040513d6080811015620001d457600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919050505090505080925081935050508181600454856020015102028115156200022457fe5b046006600082825401925050819055508260000151602001516005819055506200025c6200033e640100000000026401000000009004565b600481905550505050565b620002716200059c565b60008084925084600001516000015142101515156200028f57600080fd5b846000015160000151420391508382811515620002a857fe5b04836020018181525050838360200151029050600083602001511415620002e557846000015160000151836000015160200181815250506200030d565b620003048360000151826200055f640100000000026401000000009004565b83600001819052505b505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000806000806200035d62000315640100000000026401000000009004565b73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015620003c157600080fd5b505af1158015620003d6573d6000803e3d6000fd5b505050506040513d6020811015620003ed57600080fd5b8101908080519060200190929190505050925060009150600090505b60038054905081101562000554576200043062000315640100000000026401000000009004565b73ffffffffffffffffffffffffffffffffffffffff166370a082316003838154811015156200045b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156200050557600080fd5b505af11580156200051a573d6000803e3d6000fd5b505050506040513d60208110156200053157600080fd5b810190808051906020019092919050505082019150808060010191505062000409565b818303935050505090565b62000569620005bf565b826000015182846000015101101515156200058357600080fd5b8290508183600001510181602001818152505092915050565b606060405190810160405280620005b2620005d9565b8152602001600081525090565b604080519081016040528060008152602001600081525090565b604080519081016040528060008152602001600081525090565b610ed580620006036000396000f3006080604052600436106100db576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630bdf5300146100e0578063120c52ef1461013757806329781ec81461018d57806345278394146101d05780634e71e0c8146101e757806359ceb36f146101fe578063715018a61461022957806371a17521146102405780637fe275d41461026d5780638da5cb5b146102985780639634ef56146102ef578063c90796731461031a578063dcf53e0b14610345578063e30c3978146103b2578063f2fde38b14610409575b600080fd5b3480156100ec57600080fd5b506100f561044c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561014357600080fd5b5061016c6004803603810190808035906020019092919080359060200190929190505050610471565b60405180838152602001821515151581526020019250505060405180910390f35b34801561019957600080fd5b506101ce600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610564565b005b3480156101dc57600080fd5b506101e5610629565b005b3480156101f357600080fd5b506101fc610772565b005b34801561020a57600080fd5b50610213610913565b6040518082815260200191505060405180910390f35b34801561023557600080fd5b5061023e610919565b005b34801561024c57600080fd5b5061026b60048036038101908080359060200190929190505050610a1e565b005b34801561027957600080fd5b50610282610a28565b6040518082815260200191505060405180910390f35b3480156102a457600080fd5b506102ad610a2e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102fb57600080fd5b50610304610a54565b6040518082815260200191505060405180910390f35b34801561032657600080fd5b5061032f610a5a565b6040518082815260200191505060405180910390f35b34801561035157600080fd5b5061037060048036038101908080359060200190929190505050610a60565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103be57600080fd5b506103c7610a9e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561041557600080fd5b5061044a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ac4565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008061047f610b64565b73ffffffffffffffffffffffffffffffffffffffff1663293f9a9c6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401608060405180830381600087803b1580156104e257600080fd5b505af11580156104f6573d6000803e3d6000fd5b505050506040513d608081101561050c57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190505050905080955081935082945050505081818688020281151561055857fe5b04935050509250929050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105c057600080fd5b60038190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610631610e54565b6000806005548360000151600001818152505061065a6201518084610b8d90919063ffffffff16565b9250610664610b64565b73ffffffffffffffffffffffffffffffffffffffff1663293f9a9c6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401608060405180830381600087803b1580156106c757600080fd5b505af11580156106db573d6000803e3d6000fd5b505050506040513d60808110156106f157600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190505050905050809250819350505081816004548560200151020281151561074057fe5b04600660008282540192505081905550826000015160200151600581905550610767610c24565b600481905550505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156107ce57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60045481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561097557600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a26000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b8060058190555050565b60065481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b60055481565b600381815481101515610a6f57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b2057600080fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610b95610e54565b6000808492508460000151600001514210151515610bb257600080fd5b846000015160000151420391508382811515610bca57fe5b04836020018181525050838360200151029050600083602001511415610c055784600001516000015183600001516020018181525050610c1c565b610c13836000015182610e1a565b83600001819052505b505092915050565b600080600080610c32610b64565b73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610c9557600080fd5b505af1158015610ca9573d6000803e3d6000fd5b505050506040513d6020811015610cbf57600080fd5b8101908080519060200190929190505050925060009150600090505b600380549050811015610e0f57610cf0610b64565b73ffffffffffffffffffffffffffffffffffffffff166370a08231600383815481101515610d1a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015610dc357600080fd5b505af1158015610dd7573d6000803e3d6000fd5b505050506040513d6020811015610ded57600080fd5b8101908080519060200190929190505050820191508080600101915050610cdb565b818303935050505090565b610e22610e75565b82600001518284600001510110151515610e3b57600080fd5b8290508183600001510181602001818152505092915050565b606060405190810160405280610e68610e8f565b8152602001600081525090565b604080519081016040528060008152602001600081525090565b6040805190810160405280600081526020016000815250905600a165627a7a72305820b1722357b3d8322cf09111c68dc8343fe78d3f5e0d6091c787ab5caac3912a6d0029",
  "deployedBytecode": "0x6080604052600436106100db576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630bdf5300146100e0578063120c52ef1461013757806329781ec81461018d57806345278394146101d05780634e71e0c8146101e757806359ceb36f146101fe578063715018a61461022957806371a17521146102405780637fe275d41461026d5780638da5cb5b146102985780639634ef56146102ef578063c90796731461031a578063dcf53e0b14610345578063e30c3978146103b2578063f2fde38b14610409575b600080fd5b3480156100ec57600080fd5b506100f561044c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561014357600080fd5b5061016c6004803603810190808035906020019092919080359060200190929190505050610471565b60405180838152602001821515151581526020019250505060405180910390f35b34801561019957600080fd5b506101ce600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610564565b005b3480156101dc57600080fd5b506101e5610629565b005b3480156101f357600080fd5b506101fc610772565b005b34801561020a57600080fd5b50610213610913565b6040518082815260200191505060405180910390f35b34801561023557600080fd5b5061023e610919565b005b34801561024c57600080fd5b5061026b60048036038101908080359060200190929190505050610a1e565b005b34801561027957600080fd5b50610282610a28565b6040518082815260200191505060405180910390f35b3480156102a457600080fd5b506102ad610a2e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102fb57600080fd5b50610304610a54565b6040518082815260200191505060405180910390f35b34801561032657600080fd5b5061032f610a5a565b6040518082815260200191505060405180910390f35b34801561035157600080fd5b5061037060048036038101908080359060200190929190505050610a60565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103be57600080fd5b506103c7610a9e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561041557600080fd5b5061044a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ac4565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008061047f610b64565b73ffffffffffffffffffffffffffffffffffffffff1663293f9a9c6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401608060405180830381600087803b1580156104e257600080fd5b505af11580156104f6573d6000803e3d6000fd5b505050506040513d608081101561050c57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190505050905080955081935082945050505081818688020281151561055857fe5b04935050509250929050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105c057600080fd5b60038190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610631610e54565b6000806005548360000151600001818152505061065a6201518084610b8d90919063ffffffff16565b9250610664610b64565b73ffffffffffffffffffffffffffffffffffffffff1663293f9a9c6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401608060405180830381600087803b1580156106c757600080fd5b505af11580156106db573d6000803e3d6000fd5b505050506040513d60808110156106f157600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190505050905050809250819350505081816004548560200151020281151561074057fe5b04600660008282540192505081905550826000015160200151600581905550610767610c24565b600481905550505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156107ce57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60045481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561097557600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a26000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b8060058190555050565b60065481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b60055481565b600381815481101515610a6f57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b2057600080fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610b95610e54565b6000808492508460000151600001514210151515610bb257600080fd5b846000015160000151420391508382811515610bca57fe5b04836020018181525050838360200151029050600083602001511415610c055784600001516000015183600001516020018181525050610c1c565b610c13836000015182610e1a565b83600001819052505b505092915050565b600080600080610c32610b64565b73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610c9557600080fd5b505af1158015610ca9573d6000803e3d6000fd5b505050506040513d6020811015610cbf57600080fd5b8101908080519060200190929190505050925060009150600090505b600380549050811015610e0f57610cf0610b64565b73ffffffffffffffffffffffffffffffffffffffff166370a08231600383815481101515610d1a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015610dc357600080fd5b505af1158015610dd7573d6000803e3d6000fd5b505050506040513d6020811015610ded57600080fd5b8101908080519060200190929190505050820191508080600101915050610cdb565b818303935050505090565b610e22610e75565b82600001518284600001510110151515610e3b57600080fd5b8290508183600001510181602001818152505092915050565b606060405190810160405280610e68610e8f565b8152602001600081525090565b604080519081016040528060008152602001600081525090565b6040805190810160405280600081526020016000815250905600a165627a7a72305820b1722357b3d8322cf09111c68dc8343fe78d3f5e0d6091c787ab5caac3912a6d0029",
  "sourceMap": "684:2185:28:-;;;1366:208;8:9:-1;5:2;;;30:1;27;20:12;5:2;1366:208:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1436:14;595::27;579:13;;:30;;;;;;;;;;;;;;;;;;526:90;575:10:86;567:5;;:18;;;;;;;;;;;;;;;;;;1491:3:28;1466:22;:28;;;;1529:3;1504:22;:28;;;;1542:25;:23;;;:25;;;:::i;:::-;1366:208;684:2185;;1698:584;1750:47;;:::i;:::-;1935:13;1958;1836:22;;1807:17;:22;;;:26;;:51;;;;;1888:36;1917:6;1888:17;:28;;;;;;:36;;;;;:::i;:::-;1868:56;;2000:7;:5;;;:7;;;:::i;:::-;:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2000:30:28;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2000:30:28;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;2000:30:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1981:49;;;;;;;;;;;2144:5;2135;2106:26;;2077:17;:26;;;:55;:63;2076:73;;;;;;;;2041:31;;:108;;;;;;;;;;;2184:17;:22;;;:27;;;2159:22;:52;;;;2250:25;:23;;;:25;;;:::i;:::-;2221:26;:54;;;;1698:584;;;:::o;185:552:83:-;316:29;;:::i;:::-;425:15;519:14;370:9;355:24;;400:9;:14;;;:18;;;393:3;:25;;385:34;;;;;;;;449:9;:14;;;:18;;;443:3;:24;425:42;;507:6;497:7;:16;;;;;;;;473:12;:21;;:40;;;;;560:6;536:12;:21;;;:30;519:47;;601:1;576:12;:21;;;:26;572:161;;;637:9;:14;;;:18;;;612:12;:17;;;:22;;:43;;;;;572:161;;;696:30;700:12;:17;;;719:6;696:3;;;:30;;;:::i;:::-;676:12;:17;;:50;;;;572:161;185:552;;;;;;:::o;414:106:27:-;454:15;499:13;;;;;;;;;;;481:32;;414:106;:::o;2288:424:28:-;2346:35;2393:21;2448:29;2496:9;2417:7;:5;;;:7;;;:::i;:::-;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2417:21:28;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2417:21:28;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2417:21:28;;;;;;;;;;;;;;;;2393:45;;2480:1;2448:33;;2506:1;2496:11;;2491:138;2510:17;:24;;;;2508:1;:26;2491:138;;;2579:7;:5;;;:7;;;:::i;:::-;:17;;;2597;2615:1;2597:20;;;;;;;;;;;;;;;;;;;;;;;;;;;2579:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2579:39:28;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2579:39:28;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2579:39:28;;;;;;;;;;;;;;;;2554:64;;;;2535:3;;;;;;;2491:138;;;2684:21;2668:13;:37;2638:67;;2288:424;;;;:::o;2829:285:83:-;2945:24;;:::i;:::-;3016:9;:13;;;3004:7;2988:9;:13;;;:23;2987:42;;2979:51;;;;;;;;3051:9;3036:24;;3102:7;3086:9;:13;;;:23;3066:12;:17;;:43;;;;;2829:285;;;;:::o;684:2185:28:-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;",
  "deployedSourceMap": "684:2185:28:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;379:28:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;379:28:27;;;;;;;;;;;;;;;;;;;;;;;;;;;622:384;;8:9:-1;5:2;;;30:1;27;20:12;5:2;622:384:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1580:112:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1580:112:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;1698:584;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1698:584:28;;;;;;781:164:85;;8:9:-1;5:2;;;30:1;27;20:12;5:2;781:164:85;;;;;;805:41:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;805:41:28;;;;;;;;;;;;;;;;;;;;;;;1001:111:86;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1001:111:86;;;;;;2718:149:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2718:149:28;;;;;;;;;;;;;;;;;;;;;;;;;;1018:46;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1018:46:28;;;;;;;;;;;;;;;;;;;;;;;238:20:86;;8:9:-1;5:2;;;30:1;27;20:12;5:2;238:20:86;;;;;;;;;;;;;;;;;;;;;;;;;;;1201:37:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1201:37:28;;;;;;;;;;;;;;;;;;;;;;;932;;8:9:-1;5:2;;;30:1;27;20:12;5:2;932:37:28;;;;;;;;;;;;;;;;;;;;;;;765:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;765:34:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;253:27:85;;8:9:-1;5:2;;;30:1;27;20:12;5:2;253:27:85;;;;;;;;;;;;;;;;;;;;;;;;;;;601:96;;8:9:-1;5:2;;;30:1;27;20:12;5:2;601:96:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;379:28:27;;;;;;;;;;;;;:::o;622:384::-;744:23;769;808:13;831;891:7;:5;:7::i;:::-;:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;891:30:27;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;891:30:27;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;891:30:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;854:67;;;;;;;;;;;;;;994:5;985;969:13;950:16;:32;:40;949:50;;;;;;;;931:68;;622:384;;;;;;;:::o;1580:112:28:-;719:5:86;;;;;;;;;;;705:19;;:10;:19;;;697:28;;;;;;;;1653:17:28;1676:8;1653:32;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;1653:32:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1580:112;:::o;1698:584::-;1750:47;;:::i;:::-;1935:13;1958;1836:22;;1807:17;:22;;;:26;;:51;;;;;1888:36;1917:6;1888:17;:28;;:36;;;;:::i;:::-;1868:56;;2000:7;:5;:7::i;:::-;:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2000:30:28;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2000:30:28;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;2000:30:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1981:49;;;;;;;;;;;2144:5;2135;2106:26;;2077:17;:26;;;:55;:63;2076:73;;;;;;;;2041:31;;:108;;;;;;;;;;;2184:17;:22;;;:27;;;2159:22;:52;;;;2250:25;:23;:25::i;:::-;2221:26;:54;;;;1698:584;;;:::o;781:164:85:-;433:12;;;;;;;;;;;419:26;;:10;:26;;;411:35;;;;;;;;870:12;;;;;;;;;;;842:41;;863:5;;;;;;;;;;;842:41;;;;;;;;;;;;897:12;;;;;;;;;;;889:5;;:20;;;;;;;;;;;;;;;;;;938:1;915:12;;:25;;;;;;;;;;;;;;;;;;781:164::o;805:41:28:-;;;;:::o;1001:111:86:-;719:5;;;;;;;;;;;705:19;;:10;:19;;;697:28;;;;;;;;1077:5;;;;;;;;;;;1058:25;;;;;;;;;;;;1105:1;1089:5;;:18;;;;;;;;;;;;;;;;;;1001:111::o;2718:149:28:-;2833:27;2808:22;:52;;;;2718:149;:::o;1018:46::-;;;;:::o;238:20:86:-;;;;;;;;;;;;;:::o;1201:37:28:-;;;;:::o;932:::-;;;;:::o;765:34::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;253:27:85:-;;;;;;;;;;;;;:::o;601:96::-;719:5:86;;;;;;;;;;;705:19;;:10;:19;;;697:28;;;;;;;;684:8:85;669:12;;:23;;;;;;;;;;;;;;;;;;601:96;:::o;414:106:27:-;454:15;499:13;;;;;;;;;;;481:32;;414:106;:::o;185:552:83:-;316:29;;:::i;:::-;425:15;519:14;370:9;355:24;;400:9;:14;;;:18;;;393:3;:25;;385:34;;;;;;;;449:9;:14;;;:18;;;443:3;:24;425:42;;507:6;497:7;:16;;;;;;;;473:12;:21;;:40;;;;;560:6;536:12;:21;;;:30;519:47;;601:1;576:12;:21;;;:26;572:161;;;637:9;:14;;;:18;;;612:12;:17;;;:22;;:43;;;;;572:161;;;696:30;700:12;:17;;;719:6;696:3;:30::i;:::-;676:12;:17;;:50;;;;572:161;185:552;;;;;;:::o;2288:424:28:-;2346:35;2393:21;2448:29;2496:9;2417:7;:5;:7::i;:::-;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2417:21:28;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2417:21:28;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2417:21:28;;;;;;;;;;;;;;;;2393:45;;2480:1;2448:33;;2506:1;2496:11;;2491:138;2510:17;:24;;;;2508:1;:26;2491:138;;;2579:7;:5;:7::i;:::-;:17;;;2597;2615:1;2597:20;;;;;;;;;;;;;;;;;;;;;;;;;;;2579:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2579:39:28;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2579:39:28;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2579:39:28;;;;;;;;;;;;;;;;2554:64;;;;2535:3;;;;;;;2491:138;;;2684:21;2668:13;:37;2638:67;;2288:424;;;;:::o;2829:285:83:-;2945:24;;:::i;:::-;3016:9;:13;;;3004:7;2988:9;:13;;;:23;2987:42;;2979:51;;;;;;;;3051:9;3036:24;;3102:7;3086:9;:13;;;:23;3066:12;:17;;:43;;;;;2829:285;;;;:::o;684:2185:28:-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o",
  "source": "pragma solidity ^0.4.25;\n\nimport \"@digix/solidity-core-libraries/contracts/Types.sol\";\nimport \"openzeppelin-solidity/contracts/ownership/Claimable.sol\";\nimport \"./MockDgxDemurrageCalculator.sol\";\n\n/// @title Digix Gold Token Demurrage Reporter\n/// @author Digix Holdings Pte Ltd\n/// @notice This contract is used to keep a close estimate of how much demurrage fees would have been collected on Digix Gold Token if the demurrage fees is on.\n/// @notice Anyone can call the function updateDemurrageReporter() to keep this contract updated to the lastest day. The more often this function is called the more accurate the estimate will be (but it can only be updated at most every 24hrs)\ncontract MockDgxDemurrageReporter is MockDgxDemurrageCalculator, Claimable {\n    address[] public exempted_accounts;\n    uint256 public last_demurrageable_balance; // the total balance of DGX in non-exempted accounts, at last_payment_timestamp\n    uint256 public last_payment_timestamp;  // the last time this contract is updated\n    uint256 public culmulative_demurrage_collected; // this is the estimate of the demurrage fees that would have been collected from start_of_report_period to last_payment_timestamp\n    uint256 public start_of_report_period; // the timestamp when this contract started keeping track of demurrage fees\n\n    using Types for Types.MutableTimestamp;\n\n    constructor(address _token_address) public MockDgxDemurrageCalculator(_token_address)\n    {\n        start_of_report_period = now;\n        last_payment_timestamp = now;\n        updateDemurrageReporter();\n    }\n\n    function addExemptedAccount(address _account) public onlyOwner {\n        exempted_accounts.push(_account);\n    }\n\n    function updateDemurrageReporter() public {\n        Types.MutableTimestamp memory payment_timestamp;\n        payment_timestamp.time.pre = last_payment_timestamp;\n        payment_timestamp = payment_timestamp.advance_by(1 days);\n\n        uint256 _base;\n        uint256 _rate;\n        (_base, _rate,,) = token().showDemurrageConfigs();\n\n        culmulative_demurrage_collected += (payment_timestamp.in_units * last_demurrageable_balance * _rate) / _base;\n        last_payment_timestamp = payment_timestamp.time.post;\n        last_demurrageable_balance = getDemurrageableBalance();\n    }\n\n    function getDemurrageableBalance() internal view returns (uint256 _last_demurrageable_balance) {\n        uint256 _total_supply = token().totalSupply();\n        uint256 _no_demurrage_balance = 0;\n        for (uint256 i=0;i<exempted_accounts.length;i++) {\n            _no_demurrage_balance += token().balanceOf(exempted_accounts[i]);\n        }\n        _last_demurrageable_balance = _total_supply - _no_demurrage_balance;\n    }\n\n    function changeLastPaymentTimestamp(uint256 _new_last_payment_timestamp) public {\n        last_payment_timestamp = _new_last_payment_timestamp;\n    }\n}\n",
  "sourcePath": "/Users/aeufemio/projects/dgx/contracts/dao-contracts/contracts/mock/MockDgxDemurrageReporter.sol",
  "ast": {
    "absolutePath": "/Users/aeufemio/projects/dgx/contracts/dao-contracts/contracts/mock/MockDgxDemurrageReporter.sol",
    "exportedSymbols": {
      "MockDgxDemurrageReporter": [
        9005
      ]
    },
    "id": 9006,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 8831,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".25"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:28"
      },
      {
        "absolutePath": "@digix/solidity-core-libraries/contracts/Types.sol",
        "file": "@digix/solidity-core-libraries/contracts/Types.sol",
        "id": 8832,
        "nodeType": "ImportDirective",
        "scope": 9006,
        "sourceUnit": 25518,
        "src": "26:60:28",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/ownership/Claimable.sol",
        "file": "openzeppelin-solidity/contracts/ownership/Claimable.sol",
        "id": 8833,
        "nodeType": "ImportDirective",
        "scope": 9006,
        "sourceUnit": 25664,
        "src": "87:65:28",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/aeufemio/projects/dgx/contracts/dao-contracts/contracts/mock/MockDgxDemurrageCalculator.sol",
        "file": "./MockDgxDemurrageCalculator.sol",
        "id": 8834,
        "nodeType": "ImportDirective",
        "scope": 9006,
        "sourceUnit": 8830,
        "src": "153:42:28",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 8835,
              "name": "MockDgxDemurrageCalculator",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8829,
              "src": "721:26:28",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_MockDgxDemurrageCalculator_$8829",
                "typeString": "contract MockDgxDemurrageCalculator"
              }
            },
            "id": 8836,
            "nodeType": "InheritanceSpecifier",
            "src": "721:26:28"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 8837,
              "name": "Claimable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 25663,
              "src": "749:9:28",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Claimable_$25663",
                "typeString": "contract Claimable"
              }
            },
            "id": 8838,
            "nodeType": "InheritanceSpecifier",
            "src": "749:9:28"
          }
        ],
        "contractDependencies": [
          8829,
          25663,
          25749
        ],
        "contractKind": "contract",
        "documentation": "@title Digix Gold Token Demurrage Reporter\n @author Digix Holdings Pte Ltd\n @notice This contract is used to keep a close estimate of how much demurrage fees would have been collected on Digix Gold Token if the demurrage fees is on.\n @notice Anyone can call the function updateDemurrageReporter() to keep this contract updated to the lastest day. The more often this function is called the more accurate the estimate will be (but it can only be updated at most every 24hrs)",
        "fullyImplemented": true,
        "id": 9005,
        "linearizedBaseContracts": [
          9005,
          25663,
          25749,
          8829
        ],
        "name": "MockDgxDemurrageReporter",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 8841,
            "name": "exempted_accounts",
            "nodeType": "VariableDeclaration",
            "scope": 9005,
            "src": "765:34:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_address_$dyn_storage",
              "typeString": "address[]"
            },
            "typeName": {
              "baseType": {
                "id": 8839,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "765:7:28",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "id": 8840,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "765:9:28",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                "typeString": "address[]"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8843,
            "name": "last_demurrageable_balance",
            "nodeType": "VariableDeclaration",
            "scope": 9005,
            "src": "805:41:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 8842,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "805:7:28",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8845,
            "name": "last_payment_timestamp",
            "nodeType": "VariableDeclaration",
            "scope": 9005,
            "src": "932:37:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 8844,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "932:7:28",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8847,
            "name": "culmulative_demurrage_collected",
            "nodeType": "VariableDeclaration",
            "scope": 9005,
            "src": "1018:46:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 8846,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1018:7:28",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8849,
            "name": "start_of_report_period",
            "nodeType": "VariableDeclaration",
            "scope": 9005,
            "src": "1201:37:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 8848,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1201:7:28",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "id": 8852,
            "libraryName": {
              "contractScope": null,
              "id": 8850,
              "name": "Types",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 25517,
              "src": "1327:5:28",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Types_$25517",
                "typeString": "library Types"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1321:39:28",
            "typeName": {
              "contractScope": null,
              "id": 8851,
              "name": "Types.MutableTimestamp",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 25209,
              "src": "1337:22:28",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_MutableTimestamp_$25209_storage_ptr",
                "typeString": "struct Types.MutableTimestamp"
              }
            }
          },
          {
            "body": {
              "id": 8871,
              "nodeType": "Block",
              "src": "1456:118:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8862,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8860,
                      "name": "start_of_report_period",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8849,
                      "src": "1466:22:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8861,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26184,
                      "src": "1491:3:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1466:28:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8863,
                  "nodeType": "ExpressionStatement",
                  "src": "1466:28:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8866,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8864,
                      "name": "last_payment_timestamp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8845,
                      "src": "1504:22:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8865,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26184,
                      "src": "1529:3:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1504:28:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8867,
                  "nodeType": "ExpressionStatement",
                  "src": "1504:28:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 8868,
                      "name": "updateDemurrageReporter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8948,
                      "src": "1542:23:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 8869,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1542:25:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8870,
                  "nodeType": "ExpressionStatement",
                  "src": "1542:25:28"
                }
              ]
            },
            "documentation": null,
            "id": 8872,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8857,
                    "name": "_token_address",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8854,
                    "src": "1436:14:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 8858,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8856,
                  "name": "MockDgxDemurrageCalculator",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8829,
                  "src": "1409:26:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_MockDgxDemurrageCalculator_$8829_$",
                    "typeString": "type(contract MockDgxDemurrageCalculator)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1409:42:28"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8855,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8854,
                  "name": "_token_address",
                  "nodeType": "VariableDeclaration",
                  "scope": 8872,
                  "src": "1378:22:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8853,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1378:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1377:24:28"
            },
            "payable": false,
            "returnParameters": {
              "id": 8859,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1456:0:28"
            },
            "scope": 9005,
            "src": "1366:208:28",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8885,
              "nodeType": "Block",
              "src": "1643:49:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8882,
                        "name": "_account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8874,
                        "src": "1676:8:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8879,
                        "name": "exempted_accounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8841,
                        "src": "1653:17:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage",
                          "typeString": "address[] storage ref"
                        }
                      },
                      "id": 8881,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1653:22:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) returns (uint256)"
                      }
                    },
                    "id": 8883,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1653:32:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8884,
                  "nodeType": "ExpressionStatement",
                  "src": "1653:32:28"
                }
              ]
            },
            "documentation": null,
            "id": 8886,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 8877,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8876,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 25697,
                  "src": "1633:9:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1633:9:28"
              }
            ],
            "name": "addExemptedAccount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8875,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8874,
                  "name": "_account",
                  "nodeType": "VariableDeclaration",
                  "scope": 8886,
                  "src": "1608:16:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8873,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1608:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1607:18:28"
            },
            "payable": false,
            "returnParameters": {
              "id": 8878,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1643:0:28"
            },
            "scope": 9005,
            "src": "1580:112:28",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8947,
              "nodeType": "Block",
              "src": "1740:542:28",
              "statements": [
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8892,
                      "name": "payment_timestamp",
                      "nodeType": "VariableDeclaration",
                      "scope": 8948,
                      "src": "1750:47:28",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                        "typeString": "struct Types.MutableTimestamp"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8891,
                        "name": "Types.MutableTimestamp",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 25209,
                        "src": "1750:22:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableTimestamp_$25209_storage_ptr",
                          "typeString": "struct Types.MutableTimestamp"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8893,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1750:47:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8900,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8894,
                          "name": "payment_timestamp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8892,
                          "src": "1807:17:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                            "typeString": "struct Types.MutableTimestamp memory"
                          }
                        },
                        "id": 8897,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "time",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25206,
                        "src": "1807:22:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 8898,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "pre",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25201,
                      "src": "1807:26:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8899,
                      "name": "last_payment_timestamp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8845,
                      "src": "1836:22:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1807:51:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8901,
                  "nodeType": "ExpressionStatement",
                  "src": "1807:51:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8907,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8902,
                      "name": "payment_timestamp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8892,
                      "src": "1868:17:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                        "typeString": "struct Types.MutableTimestamp memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 8905,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1917:6:28",
                          "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"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 8903,
                          "name": "payment_timestamp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8892,
                          "src": "1888:17:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                            "typeString": "struct Types.MutableTimestamp memory"
                          }
                        },
                        "id": 8904,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "advance_by",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25281,
                        "src": "1888:28:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_MutableTimestamp_$25209_memory_ptr_$_t_uint256_$returns$_t_struct$_MutableTimestamp_$25209_memory_ptr_$bound_to$_t_struct$_MutableTimestamp_$25209_memory_ptr_$",
                          "typeString": "function (struct Types.MutableTimestamp memory,uint256) view returns (struct Types.MutableTimestamp memory)"
                        }
                      },
                      "id": 8906,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1888:36:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                        "typeString": "struct Types.MutableTimestamp memory"
                      }
                    },
                    "src": "1868:56:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                      "typeString": "struct Types.MutableTimestamp memory"
                    }
                  },
                  "id": 8908,
                  "nodeType": "ExpressionStatement",
                  "src": "1868:56:28"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8910,
                      "name": "_base",
                      "nodeType": "VariableDeclaration",
                      "scope": 8948,
                      "src": "1935:13:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8909,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1935:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8911,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1935:13:28"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8913,
                      "name": "_rate",
                      "nodeType": "VariableDeclaration",
                      "scope": 8948,
                      "src": "1958:13:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8912,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1958:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8914,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1958:13:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8922,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 8915,
                          "name": "_base",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8910,
                          "src": "1982:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 8916,
                          "name": "_rate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8913,
                          "src": "1989:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        null,
                        null
                      ],
                      "id": 8917,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "1981:16:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$__$__$",
                        "typeString": "tuple(uint256,uint256,,)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 8918,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8779,
                            "src": "2000:5:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_DummyDGX_$19610_$",
                              "typeString": "function () view returns (contract DummyDGX)"
                            }
                          },
                          "id": 8919,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2000:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_DummyDGX_$19610",
                            "typeString": "contract DummyDGX"
                          }
                        },
                        "id": 8920,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "showDemurrageConfigs",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19569,
                        "src": "2000:28:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$_t_uint256_$_t_address_$_t_bool_$",
                          "typeString": "function () view external returns (uint256,uint256,address,bool)"
                        }
                      },
                      "id": 8921,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2000:30:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_address_$_t_bool_$",
                        "typeString": "tuple(uint256,uint256,address,bool)"
                      }
                    },
                    "src": "1981:49:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8923,
                  "nodeType": "ExpressionStatement",
                  "src": "1981:49:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8934,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8924,
                      "name": "culmulative_demurrage_collected",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8847,
                      "src": "2041:31:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8933,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8930,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 8928,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 8925,
                                  "name": "payment_timestamp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8892,
                                  "src": "2077:17:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                                    "typeString": "struct Types.MutableTimestamp memory"
                                  }
                                },
                                "id": 8926,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "in_units",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 25208,
                                "src": "2077:26:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 8927,
                                "name": "last_demurrageable_balance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8843,
                                "src": "2106:26:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2077:55:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 8929,
                              "name": "_rate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8913,
                              "src": "2135:5:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2077:63:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 8931,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "2076:65:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "/",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 8932,
                        "name": "_base",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8910,
                        "src": "2144:5:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "2076:73:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2041:108:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8935,
                  "nodeType": "ExpressionStatement",
                  "src": "2041:108:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8940,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8936,
                      "name": "last_payment_timestamp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8845,
                      "src": "2159:22:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8937,
                          "name": "payment_timestamp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8892,
                          "src": "2184:17:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                            "typeString": "struct Types.MutableTimestamp memory"
                          }
                        },
                        "id": 8938,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "time",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25206,
                        "src": "2184:22:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 8939,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "post",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25203,
                      "src": "2184:27:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2159:52:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8941,
                  "nodeType": "ExpressionStatement",
                  "src": "2159:52:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8945,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8942,
                      "name": "last_demurrageable_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8843,
                      "src": "2221:26:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8943,
                        "name": "getDemurrageableBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8994,
                        "src": "2250:23:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 8944,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2250:25:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2221:54:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8946,
                  "nodeType": "ExpressionStatement",
                  "src": "2221:54:28"
                }
              ]
            },
            "documentation": null,
            "id": 8948,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "updateDemurrageReporter",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8887,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1730:2:28"
            },
            "payable": false,
            "returnParameters": {
              "id": 8888,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1740:0:28"
            },
            "scope": 9005,
            "src": "1698:584:28",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8993,
              "nodeType": "Block",
              "src": "2383:329:28",
              "statements": [
                {
                  "assignments": [
                    8954
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8954,
                      "name": "_total_supply",
                      "nodeType": "VariableDeclaration",
                      "scope": 8994,
                      "src": "2393:21:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8953,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2393:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8959,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 8955,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8779,
                          "src": "2417:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_DummyDGX_$19610_$",
                            "typeString": "function () view returns (contract DummyDGX)"
                          }
                        },
                        "id": 8956,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2417:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DummyDGX_$19610",
                          "typeString": "contract DummyDGX"
                        }
                      },
                      "id": 8957,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19378,
                      "src": "2417:19:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 8958,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2417:21:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2393:45:28"
                },
                {
                  "assignments": [
                    8961
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8961,
                      "name": "_no_demurrage_balance",
                      "nodeType": "VariableDeclaration",
                      "scope": 8994,
                      "src": "2448:29:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8960,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2448:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8963,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 8962,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2480:1:28",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2448:33:28"
                },
                {
                  "body": {
                    "id": 8985,
                    "nodeType": "Block",
                    "src": "2540:89:28",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8983,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8975,
                            "name": "_no_demurrage_balance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8961,
                            "src": "2554:21:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 8979,
                                  "name": "exempted_accounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8841,
                                  "src": "2597:17:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                    "typeString": "address[] storage ref"
                                  }
                                },
                                "id": 8981,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 8980,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8965,
                                  "src": "2615:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "2597:20:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 8976,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8779,
                                  "src": "2579:5:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_DummyDGX_$19610_$",
                                    "typeString": "function () view returns (contract DummyDGX)"
                                  }
                                },
                                "id": 8977,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2579:7:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_DummyDGX_$19610",
                                  "typeString": "contract DummyDGX"
                                }
                              },
                              "id": 8978,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "balanceOf",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 19395,
                              "src": "2579:17:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view external returns (uint256)"
                              }
                            },
                            "id": 8982,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2579:39:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2554:64:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8984,
                        "nodeType": "ExpressionStatement",
                        "src": "2554:64:28"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8971,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8968,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8965,
                      "src": "2508:1:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8969,
                        "name": "exempted_accounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8841,
                        "src": "2510:17:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage",
                          "typeString": "address[] storage ref"
                        }
                      },
                      "id": 8970,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2510:24:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2508:26:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8986,
                  "initializationExpression": {
                    "assignments": [
                      8965
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 8965,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 8994,
                        "src": "2496:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8964,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2496:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 8967,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 8966,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2506:1:28",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2496:11:28"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 8973,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "2535:3:28",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 8972,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8965,
                        "src": "2535:1:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8974,
                    "nodeType": "ExpressionStatement",
                    "src": "2535:3:28"
                  },
                  "nodeType": "ForStatement",
                  "src": "2491:138:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8991,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8987,
                      "name": "_last_demurrageable_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8951,
                      "src": "2638:27:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8990,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 8988,
                        "name": "_total_supply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8954,
                        "src": "2668:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 8989,
                        "name": "_no_demurrage_balance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8961,
                        "src": "2684:21:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "2668:37:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2638:67:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8992,
                  "nodeType": "ExpressionStatement",
                  "src": "2638:67:28"
                }
              ]
            },
            "documentation": null,
            "id": 8994,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getDemurrageableBalance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8949,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2320:2:28"
            },
            "payable": false,
            "returnParameters": {
              "id": 8952,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8951,
                  "name": "_last_demurrageable_balance",
                  "nodeType": "VariableDeclaration",
                  "scope": 8994,
                  "src": "2346:35:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8950,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2346:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2345:37:28"
            },
            "scope": 9005,
            "src": "2288:424:28",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9003,
              "nodeType": "Block",
              "src": "2798:69:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9001,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8999,
                      "name": "last_payment_timestamp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8845,
                      "src": "2808:22:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 9000,
                      "name": "_new_last_payment_timestamp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8996,
                      "src": "2833:27:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2808:52:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 9002,
                  "nodeType": "ExpressionStatement",
                  "src": "2808:52:28"
                }
              ]
            },
            "documentation": null,
            "id": 9004,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "changeLastPaymentTimestamp",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8997,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8996,
                  "name": "_new_last_payment_timestamp",
                  "nodeType": "VariableDeclaration",
                  "scope": 9004,
                  "src": "2754:35:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8995,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2754:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2753:37:28"
            },
            "payable": false,
            "returnParameters": {
              "id": 8998,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2798:0:28"
            },
            "scope": 9005,
            "src": "2718:149:28",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 9006,
        "src": "684:2185:28"
      }
    ],
    "src": "0:2870:28"
  },
  "legacyAST": {
    "absolutePath": "/Users/aeufemio/projects/dgx/contracts/dao-contracts/contracts/mock/MockDgxDemurrageReporter.sol",
    "exportedSymbols": {
      "MockDgxDemurrageReporter": [
        9005
      ]
    },
    "id": 9006,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 8831,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".25"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:28"
      },
      {
        "absolutePath": "@digix/solidity-core-libraries/contracts/Types.sol",
        "file": "@digix/solidity-core-libraries/contracts/Types.sol",
        "id": 8832,
        "nodeType": "ImportDirective",
        "scope": 9006,
        "sourceUnit": 25518,
        "src": "26:60:28",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/ownership/Claimable.sol",
        "file": "openzeppelin-solidity/contracts/ownership/Claimable.sol",
        "id": 8833,
        "nodeType": "ImportDirective",
        "scope": 9006,
        "sourceUnit": 25664,
        "src": "87:65:28",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/aeufemio/projects/dgx/contracts/dao-contracts/contracts/mock/MockDgxDemurrageCalculator.sol",
        "file": "./MockDgxDemurrageCalculator.sol",
        "id": 8834,
        "nodeType": "ImportDirective",
        "scope": 9006,
        "sourceUnit": 8830,
        "src": "153:42:28",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 8835,
              "name": "MockDgxDemurrageCalculator",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8829,
              "src": "721:26:28",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_MockDgxDemurrageCalculator_$8829",
                "typeString": "contract MockDgxDemurrageCalculator"
              }
            },
            "id": 8836,
            "nodeType": "InheritanceSpecifier",
            "src": "721:26:28"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 8837,
              "name": "Claimable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 25663,
              "src": "749:9:28",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Claimable_$25663",
                "typeString": "contract Claimable"
              }
            },
            "id": 8838,
            "nodeType": "InheritanceSpecifier",
            "src": "749:9:28"
          }
        ],
        "contractDependencies": [
          8829,
          25663,
          25749
        ],
        "contractKind": "contract",
        "documentation": "@title Digix Gold Token Demurrage Reporter\n @author Digix Holdings Pte Ltd\n @notice This contract is used to keep a close estimate of how much demurrage fees would have been collected on Digix Gold Token if the demurrage fees is on.\n @notice Anyone can call the function updateDemurrageReporter() to keep this contract updated to the lastest day. The more often this function is called the more accurate the estimate will be (but it can only be updated at most every 24hrs)",
        "fullyImplemented": true,
        "id": 9005,
        "linearizedBaseContracts": [
          9005,
          25663,
          25749,
          8829
        ],
        "name": "MockDgxDemurrageReporter",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 8841,
            "name": "exempted_accounts",
            "nodeType": "VariableDeclaration",
            "scope": 9005,
            "src": "765:34:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_address_$dyn_storage",
              "typeString": "address[]"
            },
            "typeName": {
              "baseType": {
                "id": 8839,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "765:7:28",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "id": 8840,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "765:9:28",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                "typeString": "address[]"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8843,
            "name": "last_demurrageable_balance",
            "nodeType": "VariableDeclaration",
            "scope": 9005,
            "src": "805:41:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 8842,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "805:7:28",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8845,
            "name": "last_payment_timestamp",
            "nodeType": "VariableDeclaration",
            "scope": 9005,
            "src": "932:37:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 8844,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "932:7:28",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8847,
            "name": "culmulative_demurrage_collected",
            "nodeType": "VariableDeclaration",
            "scope": 9005,
            "src": "1018:46:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 8846,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1018:7:28",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8849,
            "name": "start_of_report_period",
            "nodeType": "VariableDeclaration",
            "scope": 9005,
            "src": "1201:37:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 8848,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1201:7:28",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "id": 8852,
            "libraryName": {
              "contractScope": null,
              "id": 8850,
              "name": "Types",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 25517,
              "src": "1327:5:28",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Types_$25517",
                "typeString": "library Types"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1321:39:28",
            "typeName": {
              "contractScope": null,
              "id": 8851,
              "name": "Types.MutableTimestamp",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 25209,
              "src": "1337:22:28",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_MutableTimestamp_$25209_storage_ptr",
                "typeString": "struct Types.MutableTimestamp"
              }
            }
          },
          {
            "body": {
              "id": 8871,
              "nodeType": "Block",
              "src": "1456:118:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8862,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8860,
                      "name": "start_of_report_period",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8849,
                      "src": "1466:22:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8861,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26184,
                      "src": "1491:3:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1466:28:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8863,
                  "nodeType": "ExpressionStatement",
                  "src": "1466:28:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8866,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8864,
                      "name": "last_payment_timestamp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8845,
                      "src": "1504:22:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8865,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26184,
                      "src": "1529:3:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1504:28:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8867,
                  "nodeType": "ExpressionStatement",
                  "src": "1504:28:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 8868,
                      "name": "updateDemurrageReporter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8948,
                      "src": "1542:23:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 8869,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1542:25:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8870,
                  "nodeType": "ExpressionStatement",
                  "src": "1542:25:28"
                }
              ]
            },
            "documentation": null,
            "id": 8872,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8857,
                    "name": "_token_address",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8854,
                    "src": "1436:14:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 8858,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8856,
                  "name": "MockDgxDemurrageCalculator",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8829,
                  "src": "1409:26:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_MockDgxDemurrageCalculator_$8829_$",
                    "typeString": "type(contract MockDgxDemurrageCalculator)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1409:42:28"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8855,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8854,
                  "name": "_token_address",
                  "nodeType": "VariableDeclaration",
                  "scope": 8872,
                  "src": "1378:22:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8853,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1378:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1377:24:28"
            },
            "payable": false,
            "returnParameters": {
              "id": 8859,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1456:0:28"
            },
            "scope": 9005,
            "src": "1366:208:28",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8885,
              "nodeType": "Block",
              "src": "1643:49:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8882,
                        "name": "_account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8874,
                        "src": "1676:8:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8879,
                        "name": "exempted_accounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8841,
                        "src": "1653:17:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage",
                          "typeString": "address[] storage ref"
                        }
                      },
                      "id": 8881,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1653:22:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) returns (uint256)"
                      }
                    },
                    "id": 8883,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1653:32:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8884,
                  "nodeType": "ExpressionStatement",
                  "src": "1653:32:28"
                }
              ]
            },
            "documentation": null,
            "id": 8886,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 8877,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8876,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 25697,
                  "src": "1633:9:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1633:9:28"
              }
            ],
            "name": "addExemptedAccount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8875,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8874,
                  "name": "_account",
                  "nodeType": "VariableDeclaration",
                  "scope": 8886,
                  "src": "1608:16:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8873,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1608:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1607:18:28"
            },
            "payable": false,
            "returnParameters": {
              "id": 8878,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1643:0:28"
            },
            "scope": 9005,
            "src": "1580:112:28",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8947,
              "nodeType": "Block",
              "src": "1740:542:28",
              "statements": [
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8892,
                      "name": "payment_timestamp",
                      "nodeType": "VariableDeclaration",
                      "scope": 8948,
                      "src": "1750:47:28",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                        "typeString": "struct Types.MutableTimestamp"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8891,
                        "name": "Types.MutableTimestamp",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 25209,
                        "src": "1750:22:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableTimestamp_$25209_storage_ptr",
                          "typeString": "struct Types.MutableTimestamp"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8893,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1750:47:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8900,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8894,
                          "name": "payment_timestamp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8892,
                          "src": "1807:17:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                            "typeString": "struct Types.MutableTimestamp memory"
                          }
                        },
                        "id": 8897,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "time",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25206,
                        "src": "1807:22:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 8898,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "pre",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25201,
                      "src": "1807:26:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8899,
                      "name": "last_payment_timestamp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8845,
                      "src": "1836:22:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1807:51:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8901,
                  "nodeType": "ExpressionStatement",
                  "src": "1807:51:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8907,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8902,
                      "name": "payment_timestamp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8892,
                      "src": "1868:17:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                        "typeString": "struct Types.MutableTimestamp memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 8905,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1917:6:28",
                          "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"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 8903,
                          "name": "payment_timestamp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8892,
                          "src": "1888:17:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                            "typeString": "struct Types.MutableTimestamp memory"
                          }
                        },
                        "id": 8904,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "advance_by",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25281,
                        "src": "1888:28:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_MutableTimestamp_$25209_memory_ptr_$_t_uint256_$returns$_t_struct$_MutableTimestamp_$25209_memory_ptr_$bound_to$_t_struct$_MutableTimestamp_$25209_memory_ptr_$",
                          "typeString": "function (struct Types.MutableTimestamp memory,uint256) view returns (struct Types.MutableTimestamp memory)"
                        }
                      },
                      "id": 8906,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1888:36:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                        "typeString": "struct Types.MutableTimestamp memory"
                      }
                    },
                    "src": "1868:56:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                      "typeString": "struct Types.MutableTimestamp memory"
                    }
                  },
                  "id": 8908,
                  "nodeType": "ExpressionStatement",
                  "src": "1868:56:28"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8910,
                      "name": "_base",
                      "nodeType": "VariableDeclaration",
                      "scope": 8948,
                      "src": "1935:13:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8909,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1935:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8911,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1935:13:28"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8913,
                      "name": "_rate",
                      "nodeType": "VariableDeclaration",
                      "scope": 8948,
                      "src": "1958:13:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8912,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1958:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8914,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1958:13:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8922,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 8915,
                          "name": "_base",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8910,
                          "src": "1982:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 8916,
                          "name": "_rate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8913,
                          "src": "1989:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        null,
                        null
                      ],
                      "id": 8917,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "1981:16:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$__$__$",
                        "typeString": "tuple(uint256,uint256,,)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 8918,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8779,
                            "src": "2000:5:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_DummyDGX_$19610_$",
                              "typeString": "function () view returns (contract DummyDGX)"
                            }
                          },
                          "id": 8919,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2000:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_DummyDGX_$19610",
                            "typeString": "contract DummyDGX"
                          }
                        },
                        "id": 8920,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "showDemurrageConfigs",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 19569,
                        "src": "2000:28:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$_t_uint256_$_t_address_$_t_bool_$",
                          "typeString": "function () view external returns (uint256,uint256,address,bool)"
                        }
                      },
                      "id": 8921,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2000:30:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_address_$_t_bool_$",
                        "typeString": "tuple(uint256,uint256,address,bool)"
                      }
                    },
                    "src": "1981:49:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8923,
                  "nodeType": "ExpressionStatement",
                  "src": "1981:49:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8934,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8924,
                      "name": "culmulative_demurrage_collected",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8847,
                      "src": "2041:31:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8933,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8930,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 8928,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 8925,
                                  "name": "payment_timestamp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8892,
                                  "src": "2077:17:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                                    "typeString": "struct Types.MutableTimestamp memory"
                                  }
                                },
                                "id": 8926,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "in_units",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 25208,
                                "src": "2077:26:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 8927,
                                "name": "last_demurrageable_balance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8843,
                                "src": "2106:26:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2077:55:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 8929,
                              "name": "_rate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8913,
                              "src": "2135:5:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2077:63:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 8931,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "2076:65:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "/",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 8932,
                        "name": "_base",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8910,
                        "src": "2144:5:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "2076:73:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2041:108:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8935,
                  "nodeType": "ExpressionStatement",
                  "src": "2041:108:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8940,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8936,
                      "name": "last_payment_timestamp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8845,
                      "src": "2159:22:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8937,
                          "name": "payment_timestamp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8892,
                          "src": "2184:17:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                            "typeString": "struct Types.MutableTimestamp memory"
                          }
                        },
                        "id": 8938,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "time",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25206,
                        "src": "2184:22:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 8939,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "post",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25203,
                      "src": "2184:27:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2159:52:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8941,
                  "nodeType": "ExpressionStatement",
                  "src": "2159:52:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8945,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8942,
                      "name": "last_demurrageable_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8843,
                      "src": "2221:26:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8943,
                        "name": "getDemurrageableBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8994,
                        "src": "2250:23:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 8944,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2250:25:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2221:54:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8946,
                  "nodeType": "ExpressionStatement",
                  "src": "2221:54:28"
                }
              ]
            },
            "documentation": null,
            "id": 8948,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "updateDemurrageReporter",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8887,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1730:2:28"
            },
            "payable": false,
            "returnParameters": {
              "id": 8888,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1740:0:28"
            },
            "scope": 9005,
            "src": "1698:584:28",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8993,
              "nodeType": "Block",
              "src": "2383:329:28",
              "statements": [
                {
                  "assignments": [
                    8954
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8954,
                      "name": "_total_supply",
                      "nodeType": "VariableDeclaration",
                      "scope": 8994,
                      "src": "2393:21:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8953,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2393:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8959,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 8955,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8779,
                          "src": "2417:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_DummyDGX_$19610_$",
                            "typeString": "function () view returns (contract DummyDGX)"
                          }
                        },
                        "id": 8956,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2417:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DummyDGX_$19610",
                          "typeString": "contract DummyDGX"
                        }
                      },
                      "id": 8957,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19378,
                      "src": "2417:19:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 8958,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2417:21:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2393:45:28"
                },
                {
                  "assignments": [
                    8961
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8961,
                      "name": "_no_demurrage_balance",
                      "nodeType": "VariableDeclaration",
                      "scope": 8994,
                      "src": "2448:29:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8960,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2448:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8963,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 8962,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2480:1:28",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2448:33:28"
                },
                {
                  "body": {
                    "id": 8985,
                    "nodeType": "Block",
                    "src": "2540:89:28",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8983,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8975,
                            "name": "_no_demurrage_balance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8961,
                            "src": "2554:21:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 8979,
                                  "name": "exempted_accounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8841,
                                  "src": "2597:17:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                    "typeString": "address[] storage ref"
                                  }
                                },
                                "id": 8981,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 8980,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8965,
                                  "src": "2615:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "2597:20:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 8976,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8779,
                                  "src": "2579:5:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_DummyDGX_$19610_$",
                                    "typeString": "function () view returns (contract DummyDGX)"
                                  }
                                },
                                "id": 8977,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2579:7:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_DummyDGX_$19610",
                                  "typeString": "contract DummyDGX"
                                }
                              },
                              "id": 8978,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "balanceOf",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 19395,
                              "src": "2579:17:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view external returns (uint256)"
                              }
                            },
                            "id": 8982,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2579:39:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2554:64:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8984,
                        "nodeType": "ExpressionStatement",
                        "src": "2554:64:28"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8971,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8968,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8965,
                      "src": "2508:1:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8969,
                        "name": "exempted_accounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8841,
                        "src": "2510:17:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage",
                          "typeString": "address[] storage ref"
                        }
                      },
                      "id": 8970,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2510:24:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2508:26:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8986,
                  "initializationExpression": {
                    "assignments": [
                      8965
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 8965,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 8994,
                        "src": "2496:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8964,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2496:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 8967,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 8966,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2506:1:28",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2496:11:28"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 8973,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "2535:3:28",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 8972,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8965,
                        "src": "2535:1:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8974,
                    "nodeType": "ExpressionStatement",
                    "src": "2535:3:28"
                  },
                  "nodeType": "ForStatement",
                  "src": "2491:138:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8991,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8987,
                      "name": "_last_demurrageable_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8951,
                      "src": "2638:27:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8990,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 8988,
                        "name": "_total_supply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8954,
                        "src": "2668:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 8989,
                        "name": "_no_demurrage_balance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8961,
                        "src": "2684:21:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "2668:37:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2638:67:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8992,
                  "nodeType": "ExpressionStatement",
                  "src": "2638:67:28"
                }
              ]
            },
            "documentation": null,
            "id": 8994,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getDemurrageableBalance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8949,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2320:2:28"
            },
            "payable": false,
            "returnParameters": {
              "id": 8952,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8951,
                  "name": "_last_demurrageable_balance",
                  "nodeType": "VariableDeclaration",
                  "scope": 8994,
                  "src": "2346:35:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8950,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2346:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2345:37:28"
            },
            "scope": 9005,
            "src": "2288:424:28",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9003,
              "nodeType": "Block",
              "src": "2798:69:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9001,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8999,
                      "name": "last_payment_timestamp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8845,
                      "src": "2808:22:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 9000,
                      "name": "_new_last_payment_timestamp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8996,
                      "src": "2833:27:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2808:52:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 9002,
                  "nodeType": "ExpressionStatement",
                  "src": "2808:52:28"
                }
              ]
            },
            "documentation": null,
            "id": 9004,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "changeLastPaymentTimestamp",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8997,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8996,
                  "name": "_new_last_payment_timestamp",
                  "nodeType": "VariableDeclaration",
                  "scope": 9004,
                  "src": "2754:35:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8995,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2754:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2753:37:28"
            },
            "payable": false,
            "returnParameters": {
              "id": 8998,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2798:0:28"
            },
            "scope": 9005,
            "src": "2718:149:28",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 9006,
        "src": "684:2185:28"
      }
    ],
    "src": "0:2870:28"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.25+commit.59dbf8f1.Emscripten.clang"
  },
  "networks": {
    "42": {
      "events": {},
      "links": {},
      "address": "0x24fe39e6014e2f195c9fb2a2ad45b0c92e1eefd6",
      "transactionHash": "0x74b91f24be0bb2f54eacd1cad518eb036337a043cd15a5bedd408962e8f04df2"
    }
  },
  "schemaVersion": "2.0.2",
  "updatedAt": "2020-03-16T08:53:12.871Z"
}