{
  "contractName": "Vouching",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "oldOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "nameHash",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "name": "name",
          "type": "string"
        },
        {
          "indexed": true,
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "dependencyAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "initialStake",
          "type": "uint256"
        }
      ],
      "name": "DependencyCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "nameHash",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Vouched",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "nameHash",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Unvouched",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "nameHash",
          "type": "bytes32"
        }
      ],
      "name": "DependencyRemoved",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "minimumStake",
          "type": "uint256"
        },
        {
          "name": "token",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "minimumStake",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "token",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "name",
          "type": "string"
        }
      ],
      "name": "getDependency",
      "outputs": [
        {
          "name": "",
          "type": "address"
        },
        {
          "name": "",
          "type": "address"
        },
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "name",
          "type": "string"
        },
        {
          "name": "owner",
          "type": "address"
        },
        {
          "name": "dependencyAddress",
          "type": "address"
        },
        {
          "name": "initialStake",
          "type": "uint256"
        }
      ],
      "name": "create",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "name",
          "type": "string"
        },
        {
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "name",
          "type": "string"
        },
        {
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "vouch",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "name",
          "type": "string"
        },
        {
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "unvouch",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "name",
          "type": "string"
        }
      ],
      "name": "remove",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50611db3806100206000396000f300608060405260043610610099576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680635be17b001461009e5780635ec7ad01146100e35780636c6f82131461016857806380599e4b146101ad5780639c91e9ae146101e8578063c0e793c2146102cb578063da35a26f14610326578063ec5ffac214610373578063fc0c546a1461039e575b600080fd5b3480156100aa57600080fd5b506100e1600480360381019080803590602001908201803590602001919091929391929390803590602001909291905050506103f5565b005b3480156100ef57600080fd5b50610166600480360381019080803590602001908201803590602001919091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506107a3565b005b34801561017457600080fd5b506101ab60048036038101908080359060200190820180359060200191909192939192939080359060200190929190505050610dc4565b005b3480156101b957600080fd5b506101e66004803603810190808035906020019082018035906020019190919293919293905050506110ce565b005b3480156101f457600080fd5b5061024f600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611423565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390f35b3480156102d757600080fd5b50610324600480360381019080803590602001908201803590602001919091929391929390803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115c2565b005b34801561033257600080fd5b5061037160048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118b8565b005b34801561037f57600080fd5b50610388611adc565b6040518082815260200191505060405180910390f35b3480156103aa57600080fd5b506103b3611ae6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600083838080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050506033816040518082805190602001908083835b602083101515610462578051825260208201915060208101905060208303925061043d565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610581576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f53656e646572206d7573742062652074686520646570656e64656e6379206f7781526020017f6e6572000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6105bc836033878760405180838380828437820191505092505050908152602001604051809103902060020154611b1090919063ffffffff16565b9150603554821015151561065e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b8152602001807f52656d61696e696e67207374616b65206d75737420626520657175616c206f7281526020017f2067726561746572207468616e206d696e696d756d207374616b65000000000081525060400191505060405180910390fd5b8160338686604051808383808284378201915050925050509081526020016040518091039020600201819055506106d83384603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611b319092919063ffffffff16565b8484604051602001808383808284378201915050925050506040516020818303038152906040526040518082805190602001908083835b602083101515610734578051825260208201915060208101905060208303925061070f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600019167f219161330e013c572dbddc7c784c23154d4e615598fd17809bbce82941f1d306846040518082815260200191505060405180910390a25050505050565b6035548110151515610843576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001807f496e697469616c207374616b65206d75737420626520657175616c206f72206781526020017f726561746572207468616e206d696e696d756d207374616b650000000000000081525060400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156108e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4f776e657220616464726573732063616e6e6f74206265207a65726f0000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156109b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f446570656e64656e637920616464726573732063616e6e6f74206265207a657281526020017f6f0000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6109d28273ffffffffffffffffffffffffffffffffffffffff16611c1f565b1515610a46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f446570656e64656e63696573206d75737420626520636f6e747261637473000081525060200191505060405180910390fd5b6034858560405180838380828437820191505092505050908152602001604051809103902060009054906101000a900460ff16151515610b14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f476976656e20646570656e64656e6379206e616d6520697320616c726561647981526020017f207265676973746572656400000000000000000000000000000000000000000081525060400191505060405180910390fd5b60016034868660405180838380828437820191505092505050908152602001604051809103902060006101000a81548160ff0219169083151502179055506060604051908101604052808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152506033868660405180838380828437820191505092505050908152602001604051809103902060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155905050610ca9833083603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c32909392919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff168686604051602001808383808284378201915050925050506040516020818303038152906040526040518082805190602001908083835b602083101515610d335780518252602082019150602081019050602083039250610d0e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600019167f9ad577319e73a6c105cbd07282c1a2572ebcd5f837ec8c9117e3d8cbe6b91cc488888660405180806020018381526020018281038252858582818152602001925080828437820191505094505050505060405180910390a45050505050565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050506033816040518082805190602001908083835b602083101515610e2f5780518252602082019150602081019050602083039250610e0a565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610f4e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f53656e646572206d7573742062652074686520646570656e64656e6379206f7781526020017f6e6572000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b610f89826033868660405180838380828437820191505092505050908152602001604051809103902060020154611d5590919063ffffffff16565b6033858560405180838380828437820191505092505050908152602001604051809103902060020181905550611004333084603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c32909392919063ffffffff16565b8383604051602001808383808284378201915050925050506040516020818303038152906040526040518082805190602001908083835b602083101515611060578051825260208201915060208101905060208303925061103b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600019167fb48d012f027da23dbfacea42893bc20fb21482de1eb9d1737697eb3622557bd6836040518082815260200191505060405180910390a250505050565b600082828080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050506033816040518082805190602001908083835b60208310151561113b5780518252602082019150602081019050602083039250611116565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561125a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f53656e646572206d7573742062652074686520646570656e64656e6379206f7781526020017f6e6572000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6112976035546033868660405180838380828437820191505092505050908152602001604051809103902060020154611b1090919063ffffffff16565b915060338484604051808383808284378201915050925050509081526020016040518091039020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600282016000905550506113643383603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611b319092919063ffffffff16565b8383604051602001808383808284378201915050925050506040516020818303038152906040526040518082805190602001908083835b6020831015156113c0578051825260208201915060208101905060208303925061139b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600019167f60e2aa021c4f5303dd65e2173f0180636e4d42eaefc6187278e92bee9d06aa7260405160405180910390a250505050565b60008060006033846040518082805190602001908083835b602083101515611460578051825260208201915060208101905060208303925061143b565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166033856040518082805190602001908083835b6020831015156114ef57805182526020820191506020810190506020830392506114ca565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166033866040518082805190602001908083835b60208310151561157e5780518252602082019150602081019050602083039250611559565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020600201549250925092509193909250565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050506033816040518082805190602001908083835b60208310151561162d5780518252602082019150602081019050602083039250611608565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561174c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f53656e646572206d7573742062652074686520646570656e64656e6379206f7781526020017f6e6572000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156117f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4e6577206f776e657220616464726573732063616e6e6f74206265207a65726f81525060200191505060405180910390fd5b816033858560405180838380828437820191505092505050908152602001604051809103902060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350505050565b60008060019054906101000a900460ff16806118d857506118d7611d76565b5b806118ef57506000809054906101000a900460ff16155b1515611989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f436f6e747261637420696e7374616e63652068617320616c726561647920626581526020017f656e20696e697469616c697a656400000000000000000000000000000000000081525060400191505060405180910390fd5b600060019054906101000a900460ff1690506001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611a75576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f546f6b656e20616464726573732063616e6e6f74206265207a65726f0000000081525060200191505060405180910390fd5b8260358190555081603660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600060016101000a81548160ff021916908315150217905550505050565b6000603554905090565b6000603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080838311151515611b2257600080fd5b82840390508091505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611bd457600080fd5b505af1158015611be8573d6000803e3d6000fd5b505050506040513d6020811015611bfe57600080fd5b81019080805190602001909291905050501515611c1a57600080fd5b505050565b600080823b905060008111915050919050565b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd8484846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611d0957600080fd5b505af1158015611d1d573d6000803e3d6000fd5b505050506040513d6020811015611d3357600080fd5b81019080805190602001909291905050501515611d4f57600080fd5b50505050565b6000808284019050838110151515611d6c57600080fd5b8091505092915050565b600080303b905060008114915050905600a165627a7a72305820c53efe3cf602378f0896c96e521166623f9b7ed32023e2b8f31e4151f4aaafec0029",
  "deployedBytecode": "0x608060405260043610610099576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680635be17b001461009e5780635ec7ad01146100e35780636c6f82131461016857806380599e4b146101ad5780639c91e9ae146101e8578063c0e793c2146102cb578063da35a26f14610326578063ec5ffac214610373578063fc0c546a1461039e575b600080fd5b3480156100aa57600080fd5b506100e1600480360381019080803590602001908201803590602001919091929391929390803590602001909291905050506103f5565b005b3480156100ef57600080fd5b50610166600480360381019080803590602001908201803590602001919091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506107a3565b005b34801561017457600080fd5b506101ab60048036038101908080359060200190820180359060200191909192939192939080359060200190929190505050610dc4565b005b3480156101b957600080fd5b506101e66004803603810190808035906020019082018035906020019190919293919293905050506110ce565b005b3480156101f457600080fd5b5061024f600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611423565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390f35b3480156102d757600080fd5b50610324600480360381019080803590602001908201803590602001919091929391929390803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115c2565b005b34801561033257600080fd5b5061037160048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118b8565b005b34801561037f57600080fd5b50610388611adc565b6040518082815260200191505060405180910390f35b3480156103aa57600080fd5b506103b3611ae6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600083838080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050506033816040518082805190602001908083835b602083101515610462578051825260208201915060208101905060208303925061043d565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610581576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f53656e646572206d7573742062652074686520646570656e64656e6379206f7781526020017f6e6572000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6105bc836033878760405180838380828437820191505092505050908152602001604051809103902060020154611b1090919063ffffffff16565b9150603554821015151561065e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b8152602001807f52656d61696e696e67207374616b65206d75737420626520657175616c206f7281526020017f2067726561746572207468616e206d696e696d756d207374616b65000000000081525060400191505060405180910390fd5b8160338686604051808383808284378201915050925050509081526020016040518091039020600201819055506106d83384603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611b319092919063ffffffff16565b8484604051602001808383808284378201915050925050506040516020818303038152906040526040518082805190602001908083835b602083101515610734578051825260208201915060208101905060208303925061070f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600019167f219161330e013c572dbddc7c784c23154d4e615598fd17809bbce82941f1d306846040518082815260200191505060405180910390a25050505050565b6035548110151515610843576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001807f496e697469616c207374616b65206d75737420626520657175616c206f72206781526020017f726561746572207468616e206d696e696d756d207374616b650000000000000081525060400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156108e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4f776e657220616464726573732063616e6e6f74206265207a65726f0000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156109b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f446570656e64656e637920616464726573732063616e6e6f74206265207a657281526020017f6f0000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6109d28273ffffffffffffffffffffffffffffffffffffffff16611c1f565b1515610a46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f446570656e64656e63696573206d75737420626520636f6e747261637473000081525060200191505060405180910390fd5b6034858560405180838380828437820191505092505050908152602001604051809103902060009054906101000a900460ff16151515610b14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f476976656e20646570656e64656e6379206e616d6520697320616c726561647981526020017f207265676973746572656400000000000000000000000000000000000000000081525060400191505060405180910390fd5b60016034868660405180838380828437820191505092505050908152602001604051809103902060006101000a81548160ff0219169083151502179055506060604051908101604052808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152506033868660405180838380828437820191505092505050908152602001604051809103902060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155905050610ca9833083603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c32909392919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff168686604051602001808383808284378201915050925050506040516020818303038152906040526040518082805190602001908083835b602083101515610d335780518252602082019150602081019050602083039250610d0e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600019167f9ad577319e73a6c105cbd07282c1a2572ebcd5f837ec8c9117e3d8cbe6b91cc488888660405180806020018381526020018281038252858582818152602001925080828437820191505094505050505060405180910390a45050505050565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050506033816040518082805190602001908083835b602083101515610e2f5780518252602082019150602081019050602083039250610e0a565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610f4e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f53656e646572206d7573742062652074686520646570656e64656e6379206f7781526020017f6e6572000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b610f89826033868660405180838380828437820191505092505050908152602001604051809103902060020154611d5590919063ffffffff16565b6033858560405180838380828437820191505092505050908152602001604051809103902060020181905550611004333084603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c32909392919063ffffffff16565b8383604051602001808383808284378201915050925050506040516020818303038152906040526040518082805190602001908083835b602083101515611060578051825260208201915060208101905060208303925061103b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600019167fb48d012f027da23dbfacea42893bc20fb21482de1eb9d1737697eb3622557bd6836040518082815260200191505060405180910390a250505050565b600082828080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050506033816040518082805190602001908083835b60208310151561113b5780518252602082019150602081019050602083039250611116565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561125a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f53656e646572206d7573742062652074686520646570656e64656e6379206f7781526020017f6e6572000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6112976035546033868660405180838380828437820191505092505050908152602001604051809103902060020154611b1090919063ffffffff16565b915060338484604051808383808284378201915050925050509081526020016040518091039020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600282016000905550506113643383603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611b319092919063ffffffff16565b8383604051602001808383808284378201915050925050506040516020818303038152906040526040518082805190602001908083835b6020831015156113c0578051825260208201915060208101905060208303925061139b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600019167f60e2aa021c4f5303dd65e2173f0180636e4d42eaefc6187278e92bee9d06aa7260405160405180910390a250505050565b60008060006033846040518082805190602001908083835b602083101515611460578051825260208201915060208101905060208303925061143b565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166033856040518082805190602001908083835b6020831015156114ef57805182526020820191506020810190506020830392506114ca565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166033866040518082805190602001908083835b60208310151561157e5780518252602082019150602081019050602083039250611559565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020600201549250925092509193909250565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050506033816040518082805190602001908083835b60208310151561162d5780518252602082019150602081019050602083039250611608565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561174c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f53656e646572206d7573742062652074686520646570656e64656e6379206f7781526020017f6e6572000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156117f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4e6577206f776e657220616464726573732063616e6e6f74206265207a65726f81525060200191505060405180910390fd5b816033858560405180838380828437820191505092505050908152602001604051809103902060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350505050565b60008060019054906101000a900460ff16806118d857506118d7611d76565b5b806118ef57506000809054906101000a900460ff16155b1515611989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f436f6e747261637420696e7374616e63652068617320616c726561647920626581526020017f656e20696e697469616c697a656400000000000000000000000000000000000081525060400191505060405180910390fd5b600060019054906101000a900460ff1690506001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611a75576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f546f6b656e20616464726573732063616e6e6f74206265207a65726f0000000081525060200191505060405180910390fd5b8260358190555081603660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600060016101000a81548160ff021916908315150217905550505050565b6000603554905090565b6000603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080838311151515611b2257600080fd5b82840390508091505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611bd457600080fd5b505af1158015611be8573d6000803e3d6000fd5b505050506040513d6020811015611bfe57600080fd5b81019080805190602001909291905050501515611c1a57600080fd5b505050565b600080823b905060008111915050919050565b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd8484846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611d0957600080fd5b505af1158015611d1d573d6000803e3d6000fd5b505050506040513d6020811015611d3357600080fd5b81019080805190602001909291905050501515611d4f57600080fd5b50505050565b6000808284019050838110151515611d6c57600080fd5b8091505092915050565b600080303b905060008114915050905600a165627a7a72305820c53efe3cf602378f0896c96e521166623f9b7ed32023e2b8f31e4151f4aaafec0029",
  "sourceMap": "306:3770:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;306:3770:0;;;;;;;",
  "deployedSourceMap": "306:3770:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3193:413;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3193:413:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1844:812;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1844:812:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2926:263;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2926:263:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3610:463;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3610:463:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1634:206;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1634:206:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2660:262;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2660:262:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1271:199;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1271:199:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1474:84;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1474:84:0;;;;;;;;;;;;;;;;;;;;;;;1562:68;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1562:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;3193:413;3280:22;3268:4;;1124:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1194:9;1204:4;1194:15;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1194:15:0;;;;;;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;1180:35;;:10;:35;;;1172:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3305:33;3331:6;3305:9;3315:4;;3305:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:21;;;:25;;:33;;;;:::i;:::-;3280:58;;3370:13;;3352:14;:31;;3344:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3478:14;3454:9;3464:4;;3454:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:21;;:38;;;;3498:39;3518:10;3530:6;3498;;;;;;;;;;;:19;;;;:39;;;;;:::i;:::-;3586:4;;3569:22;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3569:22:0;;;3559:33;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;3559:33:0;;;;;;;;;;;;;;;;3549:52;;;;3594:6;3549:52;;;;;;;;;;;;;;;;;;3193:413;;;;;:::o;1844:812::-;1976:13;;1960:12;:29;;1952:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2082:1;2065:19;;:5;:19;;;;2057:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2160:1;2131:31;;:17;:31;;;;2123:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2214:30;:17;:28;;;:30::i;:::-;2206:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2294:21;2316:4;;2294:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2293:28;2285:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2406:4;2376:21;2398:4;;2376:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;2434:50;;;;;;;;;2445:5;2434:50;;;;;;2452:17;2434:50;;;;;;2471:12;2434:50;;;2416:9;2426:4;;2416:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2491:50;2515:5;2522:4;2528:12;2491:6;;;;;;;;;;;:23;;;;:50;;;;;;:::i;:::-;2619:17;2553:98;;2612:5;2553:98;;2598:4;;2581:22;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2581:22:0;;;2571:33;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2571:33:0;;;;;;;;;;;;;;;;2553:98;;;;2606:4;;2638:12;2553:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1844:812;;;;;:::o;2926:263::-;2999:4;;1124:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1194:9;1204:4;1194:15;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1194:15:0;;;;;;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;1180:35;;:10;:35;;;1172:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3035:33;3061:6;3035:9;3045:4;;3035:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:21;;;:25;;:33;;;;:::i;:::-;3011:9;3021:4;;3011:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:21;;:57;;;;3074:49;3098:10;3110:4;3116:6;3074;;;;;;;;;;;:23;;;;:49;;;;;;:::i;:::-;3169:4;;3152:22;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3152:22:0;;;3142:33;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;3142:33:0;;;;;;;;;;;;;;;;3134:50;;;;3177:6;3134:50;;;;;;;;;;;;;;;;;;2926:263;;;;:::o;3610:463::-;3732:24;3668:4;;1124:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1194:9;1204:4;1194:15;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1194:15:0;;;;;;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;1180:35;;:10;:35;;;1172:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3759:40;3785:13;;3759:9;3769:4;;3759:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:21;;;:25;;:40;;;;:::i;:::-;3732:67;;3934:9;3944:4;;3934:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3927:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3956:49;3976:10;3988:16;3956:6;;;;;;;;;;;:19;;;;:49;;;;;:::i;:::-;4061:4;;4044:22;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;4044:22:0;;;4034:33;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;4034:33:0;;;;;;;;;;;;;;;;4016:52;;;;;;;;;;;;;3610:463;;;;:::o;1634:206::-;1690:7;1699;1708;1738:9;1748:4;1738:15;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1738:15:0;;;;;;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;1779:9;1789:4;1779:15;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1779:15:0;;;;;;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;1808:9;1818:4;1808:15;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1808:15:0;;;;;;;;;;;;;;;;;;;;;:21;;;1723:112;;;;;;1634:206;;;;;:::o;2660:262::-;2747:4;;1124:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1194:9;1204:4;1194:15;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1194:15:0;;;;;;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;1180:35;;:10;:35;;;1172:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2787:1;2767:22;;:8;:22;;;;2759:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2856:8;2832:9;2842:4;;2832:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:21;;;:32;;;;;;;;;;;;;;;;;;2908:8;2875:42;;2896:10;2875:42;;;;;;;;;;;;2660:262;;;;:::o;1271:199::-;1121:20:16;1016:12;;;;;;;;;;;:31;;;;1032:15;:13;:15::i;:::-;1016:31;:47;;;;1052:11;;;;;;;;;;;1051:12;1016:47;1008:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1144:12;;;;;;;;;;;1121:35;;1177:4;1162:12;;:19;;;;;;;;;;;;;;;;;;1201:4;1187:11;;:18;;;;;;;;;;;;;;;;;;1376:1:0;1359:19;;:5;:19;;;;1351:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1433:12;1417:13;:28;;;;1460:5;1451:6;;:14;;;;;;;;;;;;;;;;;;1235:15:16;1220:12;;:30;;;;;;;;;;;;;;;;;;1271:199:0;;;:::o;1474:84::-;1518:7;1540:13;;1533:20;;1474:84;:::o;1562:68::-;1599:5;1619:6;;;;;;;;;;;1612:13;;1562:68;:::o;1079:131:6:-;1137:7;1173:9;1165:1;1160;:6;;1152:15;;;;;;;;1189:1;1185;:5;1173:17;;1204:1;1197:8;;1079:131;;;;;:::o;364:139:11:-;472:5;:14;;;487:2;491:5;472:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;472:25:11;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;472:25:11;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;472:25:11;;;;;;;;;;;;;;;;464:34;;;;;;;;364:139;;;:::o;450:582:12:-;510:4;522:12;997:7;985:20;977:28;;1026:1;1019:4;:8;1012:15;;450:582;;;;:::o;507:171:11:-;637:5;:18;;;656:4;662:2;666:5;637:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;637:35:11;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;637:35:11;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;637:35:11;;;;;;;;;;;;;;;;629:44;;;;;;;;507:171;;;;:::o;1273:131:6:-;1331:7;1346:9;1362:1;1358;:5;1346:17;;1382:1;1377;:6;;1369:15;;;;;;;;1398:1;1391:8;;1273:131;;;;;:::o;1341:467:16:-;1388:4;1729:10;1774:7;1762:20;1756:26;;1802:1;1796:2;:7;1789:14;;1341:467;;:::o",
  "source": "pragma solidity ^0.4.24;\n\n\nimport \"zos-lib/contracts/Initializable.sol\";\nimport \"openzeppelin-eth/contracts/token/ERC20/ERC20.sol\";\nimport \"openzeppelin-eth/contracts/token/ERC20/SafeERC20.sol\";\nimport \"openzeppelin-eth/contracts/math/SafeMath.sol\";\nimport \"openzeppelin-eth/contracts/utils/Address.sol\";\n\ncontract Vouching is Initializable {\n  event OwnershipTransferred(address indexed oldOwner, address indexed newOwner);\n  event DependencyCreated(\n    bytes32 indexed nameHash,\n    string name,\n    address indexed owner,\n    address indexed dependencyAddress,\n    uint256 initialStake\n  );\n  event Vouched(bytes32 indexed nameHash, uint256 amount);\n  event Unvouched(bytes32 indexed nameHash, uint256 amount);\n  event DependencyRemoved(bytes32 indexed nameHash);\n\n  using SafeMath for uint256;\n  using SafeERC20 for ERC20;\n  using Address for address;\n\n  struct Dependency {\n    address owner;\n    address dependencyAddress;\n    uint256 stake;\n  }\n\n  mapping (string => Dependency) private _registry;\n  mapping (string => bool) private _takenDependencyNames;\n  uint256 private _minimumStake;\n  ERC20 private _token;\n\n  modifier onlyDependencyOwner(string name) {\n    require(msg.sender == _registry[name].owner, \"Sender must be the dependency owner\");\n    _;\n  }\n\n  function initialize(uint256 minimumStake, ERC20 token) initializer public {\n    require(token != address(0), \"Token address cannot be zero\");\n    _minimumStake = minimumStake;\n    _token = token;\n  }\n\n  function minimumStake() public view returns(uint256) {\n    return _minimumStake;\n  }\n\n  function token() public view returns(ERC20) {\n    return _token;\n  }\n\n  function getDependency(string name) public view returns(address, address, uint256) {\n    return (\n      _registry[name].dependencyAddress,\n      _registry[name].owner,\n      _registry[name].stake\n    );\n  }\n\n  function create(string name, address owner, address dependencyAddress, uint256 initialStake) external {\n    require(initialStake >= _minimumStake, \"Initial stake must be equal or greater than minimum stake\");\n    require(owner != address(0), \"Owner address cannot be zero\");\n    require(dependencyAddress != address(0), \"Dependency address cannot be zero\");\n    require(dependencyAddress.isContract(), \"Dependencies must be contracts\");\n    require(!_takenDependencyNames[name], \"Given dependency name is already registered\");\n\n    _takenDependencyNames[name] = true;\n    _registry[name] = Dependency(owner, dependencyAddress, initialStake);\n\n    _token.safeTransferFrom(owner, this, initialStake);\n\n    emit DependencyCreated(keccak256(abi.encodePacked(name)), name, owner, dependencyAddress, initialStake);\n  }\n\n  function transferOwnership(string name, address newOwner) external onlyDependencyOwner(name) {\n    require(newOwner != address(0), \"New owner address cannot be zero\");\n    _registry[name].owner = newOwner;\n    emit OwnershipTransferred(msg.sender, newOwner);\n  }\n\n  function vouch(string name, uint256 amount) external onlyDependencyOwner(name) {\n    _registry[name].stake = _registry[name].stake.add(amount);\n    _token.safeTransferFrom(msg.sender, this, amount);\n    emit Vouched(keccak256(abi.encodePacked(name)), amount);\n  }\n\n  function unvouch(string name, uint256 amount) external onlyDependencyOwner(name) {\n    uint256 remainingStake = _registry[name].stake.sub(amount);\n    require(remainingStake >= _minimumStake, \"Remaining stake must be equal or greater than minimum stake\");\n\n    _registry[name].stake = remainingStake;\n    _token.safeTransfer(msg.sender, amount);\n\n    emit Unvouched(keccak256(abi.encodePacked(name)), amount);\n  }\n\n  function remove(string name) external onlyDependencyOwner(name) {\n    // Owner surrenders _minimumStake to the system\n    uint256 reimbursedAmount = _registry[name].stake.sub(_minimumStake);\n\n    // The entry is not removed from _takenDependencyNames, to prevent a new dependecy\n    // from reusing the same name\n    delete _registry[name];\n\n    _token.safeTransfer(msg.sender, reimbursedAmount);\n    emit DependencyRemoved(keccak256(abi.encodePacked(name)));\n  }\n\n}\n\n",
  "sourcePath": "/Users/connor/Documents/git/zos/packages/vouching/contracts/Vouching.sol",
  "ast": {
    "absolutePath": "/Users/connor/Documents/git/zos/packages/vouching/contracts/Vouching.sol",
    "exportedSymbols": {
      "Vouching": [
        416
      ]
    },
    "id": 417,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:0"
      },
      {
        "absolutePath": "zos-lib/contracts/Initializable.sol",
        "file": "zos-lib/contracts/Initializable.sol",
        "id": 2,
        "nodeType": "ImportDirective",
        "scope": 417,
        "sourceUnit": 1919,
        "src": "27:45:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-eth/contracts/token/ERC20/ERC20.sol",
        "file": "openzeppelin-eth/contracts/token/ERC20/ERC20.sol",
        "id": 3,
        "nodeType": "ImportDirective",
        "scope": 417,
        "sourceUnit": 1354,
        "src": "73:58:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-eth/contracts/token/ERC20/SafeERC20.sol",
        "file": "openzeppelin-eth/contracts/token/ERC20/SafeERC20.sol",
        "id": 4,
        "nodeType": "ImportDirective",
        "scope": 417,
        "sourceUnit": 1675,
        "src": "132:62:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-eth/contracts/math/SafeMath.sol",
        "file": "openzeppelin-eth/contracts/math/SafeMath.sol",
        "id": 5,
        "nodeType": "ImportDirective",
        "scope": 417,
        "sourceUnit": 903,
        "src": "195:54:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-eth/contracts/utils/Address.sol",
        "file": "openzeppelin-eth/contracts/utils/Address.sol",
        "id": 6,
        "nodeType": "ImportDirective",
        "scope": 417,
        "sourceUnit": 1694,
        "src": "250:54:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7,
              "name": "Initializable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1918,
              "src": "327:13:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Initializable_$1918",
                "typeString": "contract Initializable"
              }
            },
            "id": 8,
            "nodeType": "InheritanceSpecifier",
            "src": "327:13:0"
          }
        ],
        "contractDependencies": [
          1918
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 416,
        "linearizedBaseContracts": [
          416,
          1918
        ],
        "name": "Vouching",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": null,
            "id": 14,
            "name": "OwnershipTransferred",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 13,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10,
                  "indexed": true,
                  "name": "oldOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 14,
                  "src": "372:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "372:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12,
                  "indexed": true,
                  "name": "newOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 14,
                  "src": "398:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "398:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "371:52:0"
            },
            "src": "345:79:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 26,
            "name": "DependencyCreated",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 25,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16,
                  "indexed": true,
                  "name": "nameHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 26,
                  "src": "456:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 15,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "456:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18,
                  "indexed": false,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 26,
                  "src": "486:11:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 17,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "486:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20,
                  "indexed": true,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 26,
                  "src": "503:21:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "503:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 22,
                  "indexed": true,
                  "name": "dependencyAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 26,
                  "src": "530:33:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "530:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24,
                  "indexed": false,
                  "name": "initialStake",
                  "nodeType": "VariableDeclaration",
                  "scope": 26,
                  "src": "569:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 23,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "569:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "450:143:0"
            },
            "src": "427:167:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 32,
            "name": "Vouched",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 31,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28,
                  "indexed": true,
                  "name": "nameHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 32,
                  "src": "611:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 27,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "611:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 32,
                  "src": "637:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 29,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "637:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "610:42:0"
            },
            "src": "597:56:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 38,
            "name": "Unvouched",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 37,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 34,
                  "indexed": true,
                  "name": "nameHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 38,
                  "src": "672:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 33,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "672:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 36,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 38,
                  "src": "698:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 35,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "698:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "671:42:0"
            },
            "src": "656:58:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 42,
            "name": "DependencyRemoved",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 41,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 40,
                  "indexed": true,
                  "name": "nameHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 42,
                  "src": "741:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 39,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "741:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "740:26:0"
            },
            "src": "717:50:0"
          },
          {
            "id": 45,
            "libraryName": {
              "contractScope": null,
              "id": 43,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 902,
              "src": "777:8:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$902",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "771:27:0",
            "typeName": {
              "id": 44,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "790:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 48,
            "libraryName": {
              "contractScope": null,
              "id": 46,
              "name": "SafeERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1674,
              "src": "807:9:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeERC20_$1674",
                "typeString": "library SafeERC20"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "801:26:0",
            "typeName": {
              "contractScope": null,
              "id": 47,
              "name": "ERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1353,
              "src": "821:5:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20_$1353",
                "typeString": "contract ERC20"
              }
            }
          },
          {
            "id": 51,
            "libraryName": {
              "contractScope": null,
              "id": 49,
              "name": "Address",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1693,
              "src": "836:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Address_$1693",
                "typeString": "library Address"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "830:26:0",
            "typeName": {
              "id": 50,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "848:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "canonicalName": "Vouching.Dependency",
            "id": 58,
            "members": [
              {
                "constant": false,
                "id": 53,
                "name": "owner",
                "nodeType": "VariableDeclaration",
                "scope": 58,
                "src": "884:13:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 52,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "884:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 55,
                "name": "dependencyAddress",
                "nodeType": "VariableDeclaration",
                "scope": 58,
                "src": "903:25:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 54,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "903:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 57,
                "name": "stake",
                "nodeType": "VariableDeclaration",
                "scope": 58,
                "src": "934:13:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 56,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "934:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Dependency",
            "nodeType": "StructDefinition",
            "scope": 416,
            "src": "860:92:0",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 62,
            "name": "_registry",
            "nodeType": "VariableDeclaration",
            "scope": 416,
            "src": "956:48:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Dependency_$58_storage_$",
              "typeString": "mapping(string => struct Vouching.Dependency)"
            },
            "typeName": {
              "id": 61,
              "keyType": {
                "id": 59,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "965:6:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              },
              "nodeType": "Mapping",
              "src": "956:30:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Dependency_$58_storage_$",
                "typeString": "mapping(string => struct Vouching.Dependency)"
              },
              "valueType": {
                "contractScope": null,
                "id": 60,
                "name": "Dependency",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 58,
                "src": "975:10:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Dependency_$58_storage_ptr",
                  "typeString": "struct Vouching.Dependency"
                }
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 66,
            "name": "_takenDependencyNames",
            "nodeType": "VariableDeclaration",
            "scope": 416,
            "src": "1008:54:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_string_memory_$_t_bool_$",
              "typeString": "mapping(string => bool)"
            },
            "typeName": {
              "id": 65,
              "keyType": {
                "id": 63,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "1017:6:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              },
              "nodeType": "Mapping",
              "src": "1008:24:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_string_memory_$_t_bool_$",
                "typeString": "mapping(string => bool)"
              },
              "valueType": {
                "id": 64,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "1027:4:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 68,
            "name": "_minimumStake",
            "nodeType": "VariableDeclaration",
            "scope": 416,
            "src": "1066:29:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 67,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1066:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 70,
            "name": "_token",
            "nodeType": "VariableDeclaration",
            "scope": 416,
            "src": "1099:20:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ERC20_$1353",
              "typeString": "contract ERC20"
            },
            "typeName": {
              "contractScope": null,
              "id": 69,
              "name": "ERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1353,
              "src": "1099:5:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20_$1353",
                "typeString": "contract ERC20"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 86,
              "nodeType": "Block",
              "src": "1166:101:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 81,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 75,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1933,
                            "src": "1180:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 76,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1180:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 77,
                              "name": "_registry",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62,
                              "src": "1194:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Dependency_$58_storage_$",
                                "typeString": "mapping(string memory => struct Vouching.Dependency storage ref)"
                              }
                            },
                            "id": 79,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 78,
                              "name": "name",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 72,
                              "src": "1204:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1194:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Dependency_$58_storage",
                              "typeString": "struct Vouching.Dependency storage ref"
                            }
                          },
                          "id": 80,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "owner",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 53,
                          "src": "1194:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1180:35:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53656e646572206d7573742062652074686520646570656e64656e6379206f776e6572",
                        "id": 82,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1217:37:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4817c384f07dd6c8131d01921d2d359bc04603e57c904829b2d8c7972a3a6baf",
                          "typeString": "literal_string \"Sender must be the dependency owner\""
                        },
                        "value": "Sender must be the dependency owner"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4817c384f07dd6c8131d01921d2d359bc04603e57c904829b2d8c7972a3a6baf",
                          "typeString": "literal_string \"Sender must be the dependency owner\""
                        }
                      ],
                      "id": 74,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1936,
                        1937
                      ],
                      "referencedDeclaration": 1937,
                      "src": "1172:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 83,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1172:83:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 84,
                  "nodeType": "ExpressionStatement",
                  "src": "1172:83:0"
                },
                {
                  "id": 85,
                  "nodeType": "PlaceholderStatement",
                  "src": "1261:1:0"
                }
              ]
            },
            "documentation": null,
            "id": 87,
            "name": "onlyDependencyOwner",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 73,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 72,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 87,
                  "src": "1153:11:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 71,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1153:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1152:13:0"
            },
            "src": "1124:143:0",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 113,
              "nodeType": "Block",
              "src": "1345:125:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 101,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 97,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 91,
                          "src": "1359:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$1353",
                            "typeString": "contract ERC20"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 99,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1376:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 98,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1368:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 100,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1368:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1359:19:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "546f6b656e20616464726573732063616e6e6f74206265207a65726f",
                        "id": 102,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1380:30:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b97bd570dfa893d59e1d678b816146ae67b2a118c113568426b5f20389e7d682",
                          "typeString": "literal_string \"Token address cannot be zero\""
                        },
                        "value": "Token address cannot be zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b97bd570dfa893d59e1d678b816146ae67b2a118c113568426b5f20389e7d682",
                          "typeString": "literal_string \"Token address cannot be zero\""
                        }
                      ],
                      "id": 96,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1936,
                        1937
                      ],
                      "referencedDeclaration": 1937,
                      "src": "1351:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 103,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1351:60:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 104,
                  "nodeType": "ExpressionStatement",
                  "src": "1351:60:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 107,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 105,
                      "name": "_minimumStake",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 68,
                      "src": "1417:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 106,
                      "name": "minimumStake",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 89,
                      "src": "1433:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1417:28:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 108,
                  "nodeType": "ExpressionStatement",
                  "src": "1417:28:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 111,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 109,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70,
                      "src": "1451:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$1353",
                        "typeString": "contract ERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 110,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 91,
                      "src": "1460:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$1353",
                        "typeString": "contract ERC20"
                      }
                    },
                    "src": "1451:14:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$1353",
                      "typeString": "contract ERC20"
                    }
                  },
                  "id": 112,
                  "nodeType": "ExpressionStatement",
                  "src": "1451:14:0"
                }
              ]
            },
            "documentation": null,
            "id": 114,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 94,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 93,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1899,
                  "src": "1326:11:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1326:11:0"
              }
            ],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 92,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 89,
                  "name": "minimumStake",
                  "nodeType": "VariableDeclaration",
                  "scope": 114,
                  "src": "1291:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 88,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1291:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 91,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 114,
                  "src": "1313:11:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$1353",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 90,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1353,
                    "src": "1313:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$1353",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1290:35:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 95,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1345:0:0"
            },
            "scope": 416,
            "src": "1271:199:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 121,
              "nodeType": "Block",
              "src": "1527:31:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 119,
                    "name": "_minimumStake",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 68,
                    "src": "1540:13:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 118,
                  "id": 120,
                  "nodeType": "Return",
                  "src": "1533:20:0"
                }
              ]
            },
            "documentation": null,
            "id": 122,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "minimumStake",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 115,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1495:2:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 118,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 117,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 122,
                  "src": "1518:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 116,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1518:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1517:9:0"
            },
            "scope": 416,
            "src": "1474:84:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 129,
              "nodeType": "Block",
              "src": "1606:24:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 127,
                    "name": "_token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 70,
                    "src": "1619:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$1353",
                      "typeString": "contract ERC20"
                    }
                  },
                  "functionReturnParameters": 126,
                  "id": 128,
                  "nodeType": "Return",
                  "src": "1612:13:0"
                }
              ]
            },
            "documentation": null,
            "id": 130,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "token",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 123,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1576:2:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 126,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 125,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 130,
                  "src": "1599:5:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$1353",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 124,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1353,
                    "src": "1599:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$1353",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1598:7:0"
            },
            "scope": 416,
            "src": "1562:68:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 155,
              "nodeType": "Block",
              "src": "1717:123:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 141,
                            "name": "_registry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62,
                            "src": "1738:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Dependency_$58_storage_$",
                              "typeString": "mapping(string memory => struct Vouching.Dependency storage ref)"
                            }
                          },
                          "id": 143,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 142,
                            "name": "name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 132,
                            "src": "1748:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1738:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Dependency_$58_storage",
                            "typeString": "struct Vouching.Dependency storage ref"
                          }
                        },
                        "id": 144,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "dependencyAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 55,
                        "src": "1738:33:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 145,
                            "name": "_registry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62,
                            "src": "1779:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Dependency_$58_storage_$",
                              "typeString": "mapping(string memory => struct Vouching.Dependency storage ref)"
                            }
                          },
                          "id": 147,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 146,
                            "name": "name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 132,
                            "src": "1789:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1779:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Dependency_$58_storage",
                            "typeString": "struct Vouching.Dependency storage ref"
                          }
                        },
                        "id": 148,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "owner",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 53,
                        "src": "1779:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 149,
                            "name": "_registry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62,
                            "src": "1808:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Dependency_$58_storage_$",
                              "typeString": "mapping(string memory => struct Vouching.Dependency storage ref)"
                            }
                          },
                          "id": 151,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 150,
                            "name": "name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 132,
                            "src": "1818:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1808:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Dependency_$58_storage",
                            "typeString": "struct Vouching.Dependency storage ref"
                          }
                        },
                        "id": 152,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "stake",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 57,
                        "src": "1808:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 153,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "1730:105:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_uint256_$",
                      "typeString": "tuple(address,address,uint256)"
                    }
                  },
                  "functionReturnParameters": 140,
                  "id": 154,
                  "nodeType": "Return",
                  "src": "1723:112:0"
                }
              ]
            },
            "documentation": null,
            "id": 156,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getDependency",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 133,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 132,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 156,
                  "src": "1657:11:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 131,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1657:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1656:13:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 140,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 135,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 156,
                  "src": "1690:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 134,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1690:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 137,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 156,
                  "src": "1699:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 136,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1699:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 139,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 156,
                  "src": "1708:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 138,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1708:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1689:27:0"
            },
            "scope": 416,
            "src": "1634:206:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 244,
              "nodeType": "Block",
              "src": "1946:710:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 170,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 168,
                          "name": "initialStake",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 164,
                          "src": "1960:12:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 169,
                          "name": "_minimumStake",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 68,
                          "src": "1976:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1960:29:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e697469616c207374616b65206d75737420626520657175616c206f722067726561746572207468616e206d696e696d756d207374616b65",
                        "id": 171,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1991:59:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_eef2f0e2d295b900430944a4ea50851fc5e125ae72c9738ae1704f59c597173a",
                          "typeString": "literal_string \"Initial stake must be equal or greater than minimum stake\""
                        },
                        "value": "Initial stake must be equal or greater than minimum stake"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_eef2f0e2d295b900430944a4ea50851fc5e125ae72c9738ae1704f59c597173a",
                          "typeString": "literal_string \"Initial stake must be equal or greater than minimum stake\""
                        }
                      ],
                      "id": 167,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1936,
                        1937
                      ],
                      "referencedDeclaration": 1937,
                      "src": "1952:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 172,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1952:99:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 173,
                  "nodeType": "ExpressionStatement",
                  "src": "1952:99:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 179,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 175,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 160,
                          "src": "2065:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 177,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2082:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 176,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2074:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 178,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2074:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2065:19:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f776e657220616464726573732063616e6e6f74206265207a65726f",
                        "id": 180,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2086:30:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_83f15613d50744e36233662068435f875a75fdb9868ea86636d56800cc9f79af",
                          "typeString": "literal_string \"Owner address cannot be zero\""
                        },
                        "value": "Owner address cannot be zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_83f15613d50744e36233662068435f875a75fdb9868ea86636d56800cc9f79af",
                          "typeString": "literal_string \"Owner address cannot be zero\""
                        }
                      ],
                      "id": 174,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1936,
                        1937
                      ],
                      "referencedDeclaration": 1937,
                      "src": "2057:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 181,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2057:60:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 182,
                  "nodeType": "ExpressionStatement",
                  "src": "2057:60:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 188,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 184,
                          "name": "dependencyAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 162,
                          "src": "2131:17:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 186,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2160:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 185,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2152:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 187,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2152:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2131:31:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "446570656e64656e637920616464726573732063616e6e6f74206265207a65726f",
                        "id": 189,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2164:35:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_cdc2eab0673429f5c4fe24d9010dce7bf9fe224e01dbd69558c825712a9183a9",
                          "typeString": "literal_string \"Dependency address cannot be zero\""
                        },
                        "value": "Dependency address cannot be zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_cdc2eab0673429f5c4fe24d9010dce7bf9fe224e01dbd69558c825712a9183a9",
                          "typeString": "literal_string \"Dependency address cannot be zero\""
                        }
                      ],
                      "id": 183,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1936,
                        1937
                      ],
                      "referencedDeclaration": 1937,
                      "src": "2123:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 190,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2123:77:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 191,
                  "nodeType": "ExpressionStatement",
                  "src": "2123:77:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 193,
                            "name": "dependencyAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 162,
                            "src": "2214:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 194,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isContract",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1692,
                          "src": "2214:28:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$bound_to$_t_address_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 195,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2214:30:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "446570656e64656e63696573206d75737420626520636f6e747261637473",
                        "id": 196,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2246:32:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b016cb84b210c72a778151fcd6d98e402db69e21e2a5d837e60b2ff95435b9f4",
                          "typeString": "literal_string \"Dependencies must be contracts\""
                        },
                        "value": "Dependencies must be contracts"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b016cb84b210c72a778151fcd6d98e402db69e21e2a5d837e60b2ff95435b9f4",
                          "typeString": "literal_string \"Dependencies must be contracts\""
                        }
                      ],
                      "id": 192,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1936,
                        1937
                      ],
                      "referencedDeclaration": 1937,
                      "src": "2206:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 197,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2206:73:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 198,
                  "nodeType": "ExpressionStatement",
                  "src": "2206:73:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 203,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "2293:28:0",
                        "subExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 200,
                            "name": "_takenDependencyNames",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66,
                            "src": "2294:21:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_$_t_bool_$",
                              "typeString": "mapping(string memory => bool)"
                            }
                          },
                          "id": 202,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 201,
                            "name": "name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 158,
                            "src": "2316:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_calldata_ptr",
                              "typeString": "string calldata"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2294:27:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "476976656e20646570656e64656e6379206e616d6520697320616c72656164792072656769737465726564",
                        "id": 204,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2323:45:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d8cbd8b5163c68134006617745c017f075cf87b0453f65bd9a03696c21aa0c9b",
                          "typeString": "literal_string \"Given dependency name is already registered\""
                        },
                        "value": "Given dependency name is already registered"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d8cbd8b5163c68134006617745c017f075cf87b0453f65bd9a03696c21aa0c9b",
                          "typeString": "literal_string \"Given dependency name is already registered\""
                        }
                      ],
                      "id": 199,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1936,
                        1937
                      ],
                      "referencedDeclaration": 1937,
                      "src": "2285:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 205,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2285:84:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 206,
                  "nodeType": "ExpressionStatement",
                  "src": "2285:84:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 211,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 207,
                        "name": "_takenDependencyNames",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 66,
                        "src": "2376:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_string_memory_$_t_bool_$",
                          "typeString": "mapping(string memory => bool)"
                        }
                      },
                      "id": 209,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 208,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 158,
                        "src": "2398:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2376:27:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 210,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2406:4:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "2376:34:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 212,
                  "nodeType": "ExpressionStatement",
                  "src": "2376:34:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 221,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 213,
                        "name": "_registry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62,
                        "src": "2416:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Dependency_$58_storage_$",
                          "typeString": "mapping(string memory => struct Vouching.Dependency storage ref)"
                        }
                      },
                      "id": 215,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 214,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 158,
                        "src": "2426:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2416:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Dependency_$58_storage",
                        "typeString": "struct Vouching.Dependency storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 217,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 160,
                          "src": "2445:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 218,
                          "name": "dependencyAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 162,
                          "src": "2452:17:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 219,
                          "name": "initialStake",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 164,
                          "src": "2471:12:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 216,
                        "name": "Dependency",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 58,
                        "src": "2434:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_Dependency_$58_storage_ptr_$",
                          "typeString": "type(struct Vouching.Dependency storage pointer)"
                        }
                      },
                      "id": 220,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2434:50:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Dependency_$58_memory",
                        "typeString": "struct Vouching.Dependency memory"
                      }
                    },
                    "src": "2416:68:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Dependency_$58_storage",
                      "typeString": "struct Vouching.Dependency storage ref"
                    }
                  },
                  "id": 222,
                  "nodeType": "ExpressionStatement",
                  "src": "2416:68:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 226,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 160,
                        "src": "2515:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 227,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1958,
                        "src": "2522:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vouching_$416",
                          "typeString": "contract Vouching"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 228,
                        "name": "initialStake",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 164,
                        "src": "2528:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_Vouching_$416",
                          "typeString": "contract Vouching"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 223,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70,
                        "src": "2491:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$1353",
                          "typeString": "contract ERC20"
                        }
                      },
                      "id": 225,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1655,
                      "src": "2491:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$1612_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1612_$",
                        "typeString": "function (contract IERC20,address,address,uint256)"
                      }
                    },
                    "id": 229,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2491:50:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 230,
                  "nodeType": "ExpressionStatement",
                  "src": "2491:50:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 235,
                                "name": "name",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 158,
                                "src": "2598:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 233,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1920,
                                "src": "2581:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 234,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encodePacked",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "2581:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 236,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2581:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 232,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1927,
                          "src": "2571:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                            "typeString": "function () pure returns (bytes32)"
                          }
                        },
                        "id": 237,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2571:33:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 238,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 158,
                        "src": "2606:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 239,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 160,
                        "src": "2612:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 240,
                        "name": "dependencyAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 162,
                        "src": "2619:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 241,
                        "name": "initialStake",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 164,
                        "src": "2638:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 231,
                      "name": "DependencyCreated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26,
                      "src": "2553:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_string_memory_ptr_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes32,string memory,address,address,uint256)"
                      }
                    },
                    "id": 242,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2553:98:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 243,
                  "nodeType": "EmitStatement",
                  "src": "2548:103:0"
                }
              ]
            },
            "documentation": null,
            "id": 245,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "create",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 165,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 158,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 245,
                  "src": "1860:11:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 157,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1860:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 160,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 245,
                  "src": "1873:13:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 159,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1873:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 162,
                  "name": "dependencyAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 245,
                  "src": "1888:25:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 161,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1888:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 164,
                  "name": "initialStake",
                  "nodeType": "VariableDeclaration",
                  "scope": 245,
                  "src": "1915:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 163,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1915:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1859:77:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 166,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1946:0:0"
            },
            "scope": 416,
            "src": "1844:812:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 277,
              "nodeType": "Block",
              "src": "2753:169:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 260,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 256,
                          "name": "newOwner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 249,
                          "src": "2767:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 258,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2787:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 257,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2779:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 259,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2779:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2767:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e6577206f776e657220616464726573732063616e6e6f74206265207a65726f",
                        "id": 261,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2791:34:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_33b22e5cbe199f768d9bc52d4527a32749f4d873f96100bb3bdb7ac950715aaa",
                          "typeString": "literal_string \"New owner address cannot be zero\""
                        },
                        "value": "New owner address cannot be zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_33b22e5cbe199f768d9bc52d4527a32749f4d873f96100bb3bdb7ac950715aaa",
                          "typeString": "literal_string \"New owner address cannot be zero\""
                        }
                      ],
                      "id": 255,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1936,
                        1937
                      ],
                      "referencedDeclaration": 1937,
                      "src": "2759:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 262,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2759:67:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 263,
                  "nodeType": "ExpressionStatement",
                  "src": "2759:67:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 269,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 264,
                          "name": "_registry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62,
                          "src": "2832:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Dependency_$58_storage_$",
                            "typeString": "mapping(string memory => struct Vouching.Dependency storage ref)"
                          }
                        },
                        "id": 266,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 265,
                          "name": "name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 247,
                          "src": "2842:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_calldata_ptr",
                            "typeString": "string calldata"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2832:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Dependency_$58_storage",
                          "typeString": "struct Vouching.Dependency storage ref"
                        }
                      },
                      "id": 267,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 53,
                      "src": "2832:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 268,
                      "name": "newOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 249,
                      "src": "2856:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2832:32:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 270,
                  "nodeType": "ExpressionStatement",
                  "src": "2832:32:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 272,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1933,
                          "src": "2896:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 273,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2896:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 274,
                        "name": "newOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 249,
                        "src": "2908:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 271,
                      "name": "OwnershipTransferred",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14,
                      "src": "2875:20:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 275,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2875:42:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 276,
                  "nodeType": "EmitStatement",
                  "src": "2870:47:0"
                }
              ]
            },
            "documentation": null,
            "id": 278,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 252,
                    "name": "name",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 247,
                    "src": "2747:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_calldata_ptr",
                      "typeString": "string calldata"
                    }
                  }
                ],
                "id": 253,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 251,
                  "name": "onlyDependencyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 87,
                  "src": "2727:19:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_string_memory_ptr_$",
                    "typeString": "modifier (string memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2727:25:0"
              }
            ],
            "name": "transferOwnership",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 250,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 247,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 278,
                  "src": "2687:11:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 246,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2687:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 249,
                  "name": "newOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 278,
                  "src": "2700:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 248,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2700:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2686:31:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 254,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2753:0:0"
            },
            "scope": 416,
            "src": "2660:262:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 320,
              "nodeType": "Block",
              "src": "3005:184:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 299,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 288,
                          "name": "_registry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62,
                          "src": "3011:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Dependency_$58_storage_$",
                            "typeString": "mapping(string memory => struct Vouching.Dependency storage ref)"
                          }
                        },
                        "id": 290,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 289,
                          "name": "name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 280,
                          "src": "3021:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_calldata_ptr",
                            "typeString": "string calldata"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3011:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Dependency_$58_storage",
                          "typeString": "struct Vouching.Dependency storage ref"
                        }
                      },
                      "id": 291,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "stake",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 57,
                      "src": "3011:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 297,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 282,
                          "src": "3061:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 292,
                              "name": "_registry",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62,
                              "src": "3035:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Dependency_$58_storage_$",
                                "typeString": "mapping(string memory => struct Vouching.Dependency storage ref)"
                              }
                            },
                            "id": 294,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 293,
                              "name": "name",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 280,
                              "src": "3045:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_calldata_ptr",
                                "typeString": "string calldata"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3035:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Dependency_$58_storage",
                              "typeString": "struct Vouching.Dependency storage ref"
                            }
                          },
                          "id": 295,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "stake",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 57,
                          "src": "3035:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 296,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 881,
                        "src": "3035:25:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 298,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3035:33:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3011:57:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 300,
                  "nodeType": "ExpressionStatement",
                  "src": "3011:57:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 304,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1933,
                          "src": "3098:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 305,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3098:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 306,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1958,
                        "src": "3110:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vouching_$416",
                          "typeString": "contract Vouching"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 307,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 282,
                        "src": "3116:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_Vouching_$416",
                          "typeString": "contract Vouching"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 301,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70,
                        "src": "3074:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$1353",
                          "typeString": "contract ERC20"
                        }
                      },
                      "id": 303,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1655,
                      "src": "3074:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$1612_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1612_$",
                        "typeString": "function (contract IERC20,address,address,uint256)"
                      }
                    },
                    "id": 308,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3074:49:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 309,
                  "nodeType": "ExpressionStatement",
                  "src": "3074:49:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 314,
                                "name": "name",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 280,
                                "src": "3169:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 312,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1920,
                                "src": "3152:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 313,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encodePacked",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "3152:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 315,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3152:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 311,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1927,
                          "src": "3142:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                            "typeString": "function () pure returns (bytes32)"
                          }
                        },
                        "id": 316,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3142:33:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 317,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 282,
                        "src": "3177:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 310,
                      "name": "Vouched",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32,
                      "src": "3134:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes32,uint256)"
                      }
                    },
                    "id": 318,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3134:50:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 319,
                  "nodeType": "EmitStatement",
                  "src": "3129:55:0"
                }
              ]
            },
            "documentation": null,
            "id": 321,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 285,
                    "name": "name",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 280,
                    "src": "2999:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_calldata_ptr",
                      "typeString": "string calldata"
                    }
                  }
                ],
                "id": 286,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 284,
                  "name": "onlyDependencyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 87,
                  "src": "2979:19:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_string_memory_ptr_$",
                    "typeString": "modifier (string memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2979:25:0"
              }
            ],
            "name": "vouch",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 283,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 280,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 321,
                  "src": "2941:11:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 279,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2941:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 282,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 321,
                  "src": "2954:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 281,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2954:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2940:29:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 287,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3005:0:0"
            },
            "scope": 416,
            "src": "2926:263:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 373,
              "nodeType": "Block",
              "src": "3274:332:0",
              "statements": [
                {
                  "assignments": [
                    332
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 332,
                      "name": "remainingStake",
                      "nodeType": "VariableDeclaration",
                      "scope": 374,
                      "src": "3280:22:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 331,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3280:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 340,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 338,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 325,
                        "src": "3331:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 333,
                            "name": "_registry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62,
                            "src": "3305:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Dependency_$58_storage_$",
                              "typeString": "mapping(string memory => struct Vouching.Dependency storage ref)"
                            }
                          },
                          "id": 335,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 334,
                            "name": "name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 323,
                            "src": "3315:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_calldata_ptr",
                              "typeString": "string calldata"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3305:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Dependency_$58_storage",
                            "typeString": "struct Vouching.Dependency storage ref"
                          }
                        },
                        "id": 336,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "stake",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 57,
                        "src": "3305:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 337,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 857,
                      "src": "3305:25:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 339,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3305:33:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3280:58:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 344,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 342,
                          "name": "remainingStake",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 332,
                          "src": "3352:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 343,
                          "name": "_minimumStake",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 68,
                          "src": "3370:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3352:31:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "52656d61696e696e67207374616b65206d75737420626520657175616c206f722067726561746572207468616e206d696e696d756d207374616b65",
                        "id": 345,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3385:61:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_40637db8c4d1d55e66a47ee76369669aa177f726905ec14c516c0d2ff1acaf54",
                          "typeString": "literal_string \"Remaining stake must be equal or greater than minimum stake\""
                        },
                        "value": "Remaining stake must be equal or greater than minimum stake"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_40637db8c4d1d55e66a47ee76369669aa177f726905ec14c516c0d2ff1acaf54",
                          "typeString": "literal_string \"Remaining stake must be equal or greater than minimum stake\""
                        }
                      ],
                      "id": 341,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1936,
                        1937
                      ],
                      "referencedDeclaration": 1937,
                      "src": "3344:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 346,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3344:103:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 347,
                  "nodeType": "ExpressionStatement",
                  "src": "3344:103:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 353,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 348,
                          "name": "_registry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62,
                          "src": "3454:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Dependency_$58_storage_$",
                            "typeString": "mapping(string memory => struct Vouching.Dependency storage ref)"
                          }
                        },
                        "id": 350,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 349,
                          "name": "name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 323,
                          "src": "3464:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_calldata_ptr",
                            "typeString": "string calldata"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3454:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Dependency_$58_storage",
                          "typeString": "struct Vouching.Dependency storage ref"
                        }
                      },
                      "id": 351,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "stake",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 57,
                      "src": "3454:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 352,
                      "name": "remainingStake",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 332,
                      "src": "3478:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3454:38:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 354,
                  "nodeType": "ExpressionStatement",
                  "src": "3454:38:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 358,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1933,
                          "src": "3518:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 359,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3518:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 360,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 325,
                        "src": "3530:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 355,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70,
                        "src": "3498:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$1353",
                          "typeString": "contract ERC20"
                        }
                      },
                      "id": 357,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1634,
                      "src": "3498:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$1612_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1612_$",
                        "typeString": "function (contract IERC20,address,uint256)"
                      }
                    },
                    "id": 361,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3498:39:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 362,
                  "nodeType": "ExpressionStatement",
                  "src": "3498:39:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 367,
                                "name": "name",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 323,
                                "src": "3586:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 365,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1920,
                                "src": "3569:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 366,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encodePacked",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "3569:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 368,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3569:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 364,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1927,
                          "src": "3559:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                            "typeString": "function () pure returns (bytes32)"
                          }
                        },
                        "id": 369,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3559:33:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 370,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 325,
                        "src": "3594:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 363,
                      "name": "Unvouched",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 38,
                      "src": "3549:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes32,uint256)"
                      }
                    },
                    "id": 371,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3549:52:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 372,
                  "nodeType": "EmitStatement",
                  "src": "3544:57:0"
                }
              ]
            },
            "documentation": null,
            "id": 374,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 328,
                    "name": "name",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 323,
                    "src": "3268:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_calldata_ptr",
                      "typeString": "string calldata"
                    }
                  }
                ],
                "id": 329,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 327,
                  "name": "onlyDependencyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 87,
                  "src": "3248:19:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_string_memory_ptr_$",
                    "typeString": "modifier (string memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3248:25:0"
              }
            ],
            "name": "unvouch",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 326,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 323,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 374,
                  "src": "3210:11:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 322,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3210:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 325,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 374,
                  "src": "3223:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 324,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3223:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3209:29:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 330,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3274:0:0"
            },
            "scope": 416,
            "src": "3193:413:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 414,
              "nodeType": "Block",
              "src": "3674:399:0",
              "statements": [
                {
                  "assignments": [
                    383
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 383,
                      "name": "reimbursedAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 415,
                      "src": "3732:24:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 382,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3732:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 391,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 389,
                        "name": "_minimumStake",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 68,
                        "src": "3785:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 384,
                            "name": "_registry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62,
                            "src": "3759:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Dependency_$58_storage_$",
                              "typeString": "mapping(string memory => struct Vouching.Dependency storage ref)"
                            }
                          },
                          "id": 386,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 385,
                            "name": "name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 376,
                            "src": "3769:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_calldata_ptr",
                              "typeString": "string calldata"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3759:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Dependency_$58_storage",
                            "typeString": "struct Vouching.Dependency storage ref"
                          }
                        },
                        "id": 387,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "stake",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 57,
                        "src": "3759:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 388,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 857,
                      "src": "3759:25:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 390,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3759:40:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3732:67:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 395,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "3927:22:0",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 392,
                        "name": "_registry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62,
                        "src": "3934:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Dependency_$58_storage_$",
                          "typeString": "mapping(string memory => struct Vouching.Dependency storage ref)"
                        }
                      },
                      "id": 394,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 393,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 376,
                        "src": "3944:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3934:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Dependency_$58_storage",
                        "typeString": "struct Vouching.Dependency storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 396,
                  "nodeType": "ExpressionStatement",
                  "src": "3927:22:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 400,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1933,
                          "src": "3976:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 401,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3976:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 402,
                        "name": "reimbursedAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 383,
                        "src": "3988:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 397,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70,
                        "src": "3956:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$1353",
                          "typeString": "contract ERC20"
                        }
                      },
                      "id": 399,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1634,
                      "src": "3956:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$1612_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1612_$",
                        "typeString": "function (contract IERC20,address,uint256)"
                      }
                    },
                    "id": 403,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3956:49:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 404,
                  "nodeType": "ExpressionStatement",
                  "src": "3956:49:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 409,
                                "name": "name",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 376,
                                "src": "4061:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 407,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1920,
                                "src": "4044:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 408,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encodePacked",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "4044:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 410,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4044:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 406,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1927,
                          "src": "4034:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                            "typeString": "function () pure returns (bytes32)"
                          }
                        },
                        "id": 411,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4034:33:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 405,
                      "name": "DependencyRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42,
                      "src": "4016:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32)"
                      }
                    },
                    "id": 412,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4016:52:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 413,
                  "nodeType": "EmitStatement",
                  "src": "4011:57:0"
                }
              ]
            },
            "documentation": null,
            "id": 415,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 379,
                    "name": "name",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 376,
                    "src": "3668:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_calldata_ptr",
                      "typeString": "string calldata"
                    }
                  }
                ],
                "id": 380,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 378,
                  "name": "onlyDependencyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 87,
                  "src": "3648:19:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_string_memory_ptr_$",
                    "typeString": "modifier (string memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3648:25:0"
              }
            ],
            "name": "remove",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 377,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 376,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 415,
                  "src": "3626:11:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 375,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3626:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3625:13:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 381,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3674:0:0"
            },
            "scope": 416,
            "src": "3610:463:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 417,
        "src": "306:3770:0"
      }
    ],
    "src": "0:4078:0"
  },
  "legacyAST": {
    "absolutePath": "/Users/connor/Documents/git/zos/packages/vouching/contracts/Vouching.sol",
    "exportedSymbols": {
      "Vouching": [
        416
      ]
    },
    "id": 417,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:0"
      },
      {
        "absolutePath": "zos-lib/contracts/Initializable.sol",
        "file": "zos-lib/contracts/Initializable.sol",
        "id": 2,
        "nodeType": "ImportDirective",
        "scope": 417,
        "sourceUnit": 1919,
        "src": "27:45:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-eth/contracts/token/ERC20/ERC20.sol",
        "file": "openzeppelin-eth/contracts/token/ERC20/ERC20.sol",
        "id": 3,
        "nodeType": "ImportDirective",
        "scope": 417,
        "sourceUnit": 1354,
        "src": "73:58:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-eth/contracts/token/ERC20/SafeERC20.sol",
        "file": "openzeppelin-eth/contracts/token/ERC20/SafeERC20.sol",
        "id": 4,
        "nodeType": "ImportDirective",
        "scope": 417,
        "sourceUnit": 1675,
        "src": "132:62:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-eth/contracts/math/SafeMath.sol",
        "file": "openzeppelin-eth/contracts/math/SafeMath.sol",
        "id": 5,
        "nodeType": "ImportDirective",
        "scope": 417,
        "sourceUnit": 903,
        "src": "195:54:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-eth/contracts/utils/Address.sol",
        "file": "openzeppelin-eth/contracts/utils/Address.sol",
        "id": 6,
        "nodeType": "ImportDirective",
        "scope": 417,
        "sourceUnit": 1694,
        "src": "250:54:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7,
              "name": "Initializable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1918,
              "src": "327:13:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Initializable_$1918",
                "typeString": "contract Initializable"
              }
            },
            "id": 8,
            "nodeType": "InheritanceSpecifier",
            "src": "327:13:0"
          }
        ],
        "contractDependencies": [
          1918
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 416,
        "linearizedBaseContracts": [
          416,
          1918
        ],
        "name": "Vouching",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": null,
            "id": 14,
            "name": "OwnershipTransferred",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 13,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10,
                  "indexed": true,
                  "name": "oldOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 14,
                  "src": "372:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "372:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12,
                  "indexed": true,
                  "name": "newOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 14,
                  "src": "398:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "398:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "371:52:0"
            },
            "src": "345:79:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 26,
            "name": "DependencyCreated",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 25,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16,
                  "indexed": true,
                  "name": "nameHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 26,
                  "src": "456:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 15,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "456:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18,
                  "indexed": false,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 26,
                  "src": "486:11:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 17,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "486:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20,
                  "indexed": true,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 26,
                  "src": "503:21:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "503:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 22,
                  "indexed": true,
                  "name": "dependencyAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 26,
                  "src": "530:33:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "530:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24,
                  "indexed": false,
                  "name": "initialStake",
                  "nodeType": "VariableDeclaration",
                  "scope": 26,
                  "src": "569:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 23,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "569:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "450:143:0"
            },
            "src": "427:167:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 32,
            "name": "Vouched",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 31,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28,
                  "indexed": true,
                  "name": "nameHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 32,
                  "src": "611:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 27,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "611:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 32,
                  "src": "637:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 29,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "637:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "610:42:0"
            },
            "src": "597:56:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 38,
            "name": "Unvouched",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 37,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 34,
                  "indexed": true,
                  "name": "nameHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 38,
                  "src": "672:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 33,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "672:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 36,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 38,
                  "src": "698:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 35,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "698:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "671:42:0"
            },
            "src": "656:58:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 42,
            "name": "DependencyRemoved",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 41,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 40,
                  "indexed": true,
                  "name": "nameHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 42,
                  "src": "741:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 39,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "741:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "740:26:0"
            },
            "src": "717:50:0"
          },
          {
            "id": 45,
            "libraryName": {
              "contractScope": null,
              "id": 43,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 902,
              "src": "777:8:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$902",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "771:27:0",
            "typeName": {
              "id": 44,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "790:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 48,
            "libraryName": {
              "contractScope": null,
              "id": 46,
              "name": "SafeERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1674,
              "src": "807:9:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeERC20_$1674",
                "typeString": "library SafeERC20"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "801:26:0",
            "typeName": {
              "contractScope": null,
              "id": 47,
              "name": "ERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1353,
              "src": "821:5:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20_$1353",
                "typeString": "contract ERC20"
              }
            }
          },
          {
            "id": 51,
            "libraryName": {
              "contractScope": null,
              "id": 49,
              "name": "Address",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1693,
              "src": "836:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Address_$1693",
                "typeString": "library Address"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "830:26:0",
            "typeName": {
              "id": 50,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "848:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "canonicalName": "Vouching.Dependency",
            "id": 58,
            "members": [
              {
                "constant": false,
                "id": 53,
                "name": "owner",
                "nodeType": "VariableDeclaration",
                "scope": 58,
                "src": "884:13:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 52,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "884:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 55,
                "name": "dependencyAddress",
                "nodeType": "VariableDeclaration",
                "scope": 58,
                "src": "903:25:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 54,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "903:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 57,
                "name": "stake",
                "nodeType": "VariableDeclaration",
                "scope": 58,
                "src": "934:13:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 56,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "934:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Dependency",
            "nodeType": "StructDefinition",
            "scope": 416,
            "src": "860:92:0",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 62,
            "name": "_registry",
            "nodeType": "VariableDeclaration",
            "scope": 416,
            "src": "956:48:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Dependency_$58_storage_$",
              "typeString": "mapping(string => struct Vouching.Dependency)"
            },
            "typeName": {
              "id": 61,
              "keyType": {
                "id": 59,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "965:6:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              },
              "nodeType": "Mapping",
              "src": "956:30:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Dependency_$58_storage_$",
                "typeString": "mapping(string => struct Vouching.Dependency)"
              },
              "valueType": {
                "contractScope": null,
                "id": 60,
                "name": "Dependency",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 58,
                "src": "975:10:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Dependency_$58_storage_ptr",
                  "typeString": "struct Vouching.Dependency"
                }
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 66,
            "name": "_takenDependencyNames",
            "nodeType": "VariableDeclaration",
            "scope": 416,
            "src": "1008:54:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_string_memory_$_t_bool_$",
              "typeString": "mapping(string => bool)"
            },
            "typeName": {
              "id": 65,
              "keyType": {
                "id": 63,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "1017:6:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              },
              "nodeType": "Mapping",
              "src": "1008:24:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_string_memory_$_t_bool_$",
                "typeString": "mapping(string => bool)"
              },
              "valueType": {
                "id": 64,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "1027:4:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 68,
            "name": "_minimumStake",
            "nodeType": "VariableDeclaration",
            "scope": 416,
            "src": "1066:29:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 67,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1066:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 70,
            "name": "_token",
            "nodeType": "VariableDeclaration",
            "scope": 416,
            "src": "1099:20:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ERC20_$1353",
              "typeString": "contract ERC20"
            },
            "typeName": {
              "contractScope": null,
              "id": 69,
              "name": "ERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1353,
              "src": "1099:5:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20_$1353",
                "typeString": "contract ERC20"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 86,
              "nodeType": "Block",
              "src": "1166:101:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 81,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 75,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1933,
                            "src": "1180:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 76,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1180:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 77,
                              "name": "_registry",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62,
                              "src": "1194:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Dependency_$58_storage_$",
                                "typeString": "mapping(string memory => struct Vouching.Dependency storage ref)"
                              }
                            },
                            "id": 79,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 78,
                              "name": "name",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 72,
                              "src": "1204:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1194:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Dependency_$58_storage",
                              "typeString": "struct Vouching.Dependency storage ref"
                            }
                          },
                          "id": 80,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "owner",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 53,
                          "src": "1194:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1180:35:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53656e646572206d7573742062652074686520646570656e64656e6379206f776e6572",
                        "id": 82,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1217:37:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4817c384f07dd6c8131d01921d2d359bc04603e57c904829b2d8c7972a3a6baf",
                          "typeString": "literal_string \"Sender must be the dependency owner\""
                        },
                        "value": "Sender must be the dependency owner"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4817c384f07dd6c8131d01921d2d359bc04603e57c904829b2d8c7972a3a6baf",
                          "typeString": "literal_string \"Sender must be the dependency owner\""
                        }
                      ],
                      "id": 74,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1936,
                        1937
                      ],
                      "referencedDeclaration": 1937,
                      "src": "1172:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 83,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1172:83:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 84,
                  "nodeType": "ExpressionStatement",
                  "src": "1172:83:0"
                },
                {
                  "id": 85,
                  "nodeType": "PlaceholderStatement",
                  "src": "1261:1:0"
                }
              ]
            },
            "documentation": null,
            "id": 87,
            "name": "onlyDependencyOwner",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 73,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 72,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 87,
                  "src": "1153:11:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 71,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1153:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1152:13:0"
            },
            "src": "1124:143:0",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 113,
              "nodeType": "Block",
              "src": "1345:125:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 101,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 97,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 91,
                          "src": "1359:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$1353",
                            "typeString": "contract ERC20"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 99,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1376:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 98,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1368:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 100,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1368:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1359:19:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "546f6b656e20616464726573732063616e6e6f74206265207a65726f",
                        "id": 102,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1380:30:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b97bd570dfa893d59e1d678b816146ae67b2a118c113568426b5f20389e7d682",
                          "typeString": "literal_string \"Token address cannot be zero\""
                        },
                        "value": "Token address cannot be zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b97bd570dfa893d59e1d678b816146ae67b2a118c113568426b5f20389e7d682",
                          "typeString": "literal_string \"Token address cannot be zero\""
                        }
                      ],
                      "id": 96,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1936,
                        1937
                      ],
                      "referencedDeclaration": 1937,
                      "src": "1351:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 103,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1351:60:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 104,
                  "nodeType": "ExpressionStatement",
                  "src": "1351:60:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 107,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 105,
                      "name": "_minimumStake",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 68,
                      "src": "1417:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 106,
                      "name": "minimumStake",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 89,
                      "src": "1433:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1417:28:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 108,
                  "nodeType": "ExpressionStatement",
                  "src": "1417:28:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 111,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 109,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70,
                      "src": "1451:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$1353",
                        "typeString": "contract ERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 110,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 91,
                      "src": "1460:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$1353",
                        "typeString": "contract ERC20"
                      }
                    },
                    "src": "1451:14:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$1353",
                      "typeString": "contract ERC20"
                    }
                  },
                  "id": 112,
                  "nodeType": "ExpressionStatement",
                  "src": "1451:14:0"
                }
              ]
            },
            "documentation": null,
            "id": 114,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 94,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 93,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1899,
                  "src": "1326:11:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1326:11:0"
              }
            ],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 92,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 89,
                  "name": "minimumStake",
                  "nodeType": "VariableDeclaration",
                  "scope": 114,
                  "src": "1291:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 88,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1291:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 91,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 114,
                  "src": "1313:11:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$1353",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 90,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1353,
                    "src": "1313:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$1353",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1290:35:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 95,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1345:0:0"
            },
            "scope": 416,
            "src": "1271:199:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 121,
              "nodeType": "Block",
              "src": "1527:31:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 119,
                    "name": "_minimumStake",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 68,
                    "src": "1540:13:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 118,
                  "id": 120,
                  "nodeType": "Return",
                  "src": "1533:20:0"
                }
              ]
            },
            "documentation": null,
            "id": 122,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "minimumStake",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 115,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1495:2:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 118,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 117,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 122,
                  "src": "1518:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 116,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1518:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1517:9:0"
            },
            "scope": 416,
            "src": "1474:84:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 129,
              "nodeType": "Block",
              "src": "1606:24:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 127,
                    "name": "_token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 70,
                    "src": "1619:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$1353",
                      "typeString": "contract ERC20"
                    }
                  },
                  "functionReturnParameters": 126,
                  "id": 128,
                  "nodeType": "Return",
                  "src": "1612:13:0"
                }
              ]
            },
            "documentation": null,
            "id": 130,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "token",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 123,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1576:2:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 126,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 125,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 130,
                  "src": "1599:5:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$1353",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 124,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1353,
                    "src": "1599:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$1353",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1598:7:0"
            },
            "scope": 416,
            "src": "1562:68:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 155,
              "nodeType": "Block",
              "src": "1717:123:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 141,
                            "name": "_registry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62,
                            "src": "1738:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Dependency_$58_storage_$",
                              "typeString": "mapping(string memory => struct Vouching.Dependency storage ref)"
                            }
                          },
                          "id": 143,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 142,
                            "name": "name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 132,
                            "src": "1748:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1738:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Dependency_$58_storage",
                            "typeString": "struct Vouching.Dependency storage ref"
                          }
                        },
                        "id": 144,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "dependencyAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 55,
                        "src": "1738:33:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 145,
                            "name": "_registry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62,
                            "src": "1779:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Dependency_$58_storage_$",
                              "typeString": "mapping(string memory => struct Vouching.Dependency storage ref)"
                            }
                          },
                          "id": 147,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 146,
                            "name": "name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 132,
                            "src": "1789:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1779:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Dependency_$58_storage",
                            "typeString": "struct Vouching.Dependency storage ref"
                          }
                        },
                        "id": 148,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "owner",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 53,
                        "src": "1779:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 149,
                            "name": "_registry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62,
                            "src": "1808:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Dependency_$58_storage_$",
                              "typeString": "mapping(string memory => struct Vouching.Dependency storage ref)"
                            }
                          },
                          "id": 151,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 150,
                            "name": "name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 132,
                            "src": "1818:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1808:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Dependency_$58_storage",
                            "typeString": "struct Vouching.Dependency storage ref"
                          }
                        },
                        "id": 152,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "stake",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 57,
                        "src": "1808:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 153,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "1730:105:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_uint256_$",
                      "typeString": "tuple(address,address,uint256)"
                    }
                  },
                  "functionReturnParameters": 140,
                  "id": 154,
                  "nodeType": "Return",
                  "src": "1723:112:0"
                }
              ]
            },
            "documentation": null,
            "id": 156,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getDependency",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 133,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 132,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 156,
                  "src": "1657:11:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 131,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1657:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1656:13:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 140,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 135,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 156,
                  "src": "1690:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 134,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1690:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 137,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 156,
                  "src": "1699:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 136,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1699:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 139,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 156,
                  "src": "1708:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 138,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1708:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1689:27:0"
            },
            "scope": 416,
            "src": "1634:206:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 244,
              "nodeType": "Block",
              "src": "1946:710:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 170,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 168,
                          "name": "initialStake",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 164,
                          "src": "1960:12:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 169,
                          "name": "_minimumStake",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 68,
                          "src": "1976:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1960:29:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e697469616c207374616b65206d75737420626520657175616c206f722067726561746572207468616e206d696e696d756d207374616b65",
                        "id": 171,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1991:59:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_eef2f0e2d295b900430944a4ea50851fc5e125ae72c9738ae1704f59c597173a",
                          "typeString": "literal_string \"Initial stake must be equal or greater than minimum stake\""
                        },
                        "value": "Initial stake must be equal or greater than minimum stake"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_eef2f0e2d295b900430944a4ea50851fc5e125ae72c9738ae1704f59c597173a",
                          "typeString": "literal_string \"Initial stake must be equal or greater than minimum stake\""
                        }
                      ],
                      "id": 167,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1936,
                        1937
                      ],
                      "referencedDeclaration": 1937,
                      "src": "1952:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 172,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1952:99:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 173,
                  "nodeType": "ExpressionStatement",
                  "src": "1952:99:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 179,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 175,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 160,
                          "src": "2065:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 177,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2082:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 176,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2074:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 178,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2074:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2065:19:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f776e657220616464726573732063616e6e6f74206265207a65726f",
                        "id": 180,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2086:30:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_83f15613d50744e36233662068435f875a75fdb9868ea86636d56800cc9f79af",
                          "typeString": "literal_string \"Owner address cannot be zero\""
                        },
                        "value": "Owner address cannot be zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_83f15613d50744e36233662068435f875a75fdb9868ea86636d56800cc9f79af",
                          "typeString": "literal_string \"Owner address cannot be zero\""
                        }
                      ],
                      "id": 174,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1936,
                        1937
                      ],
                      "referencedDeclaration": 1937,
                      "src": "2057:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 181,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2057:60:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 182,
                  "nodeType": "ExpressionStatement",
                  "src": "2057:60:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 188,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 184,
                          "name": "dependencyAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 162,
                          "src": "2131:17:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 186,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2160:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 185,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2152:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 187,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2152:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2131:31:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "446570656e64656e637920616464726573732063616e6e6f74206265207a65726f",
                        "id": 189,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2164:35:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_cdc2eab0673429f5c4fe24d9010dce7bf9fe224e01dbd69558c825712a9183a9",
                          "typeString": "literal_string \"Dependency address cannot be zero\""
                        },
                        "value": "Dependency address cannot be zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_cdc2eab0673429f5c4fe24d9010dce7bf9fe224e01dbd69558c825712a9183a9",
                          "typeString": "literal_string \"Dependency address cannot be zero\""
                        }
                      ],
                      "id": 183,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1936,
                        1937
                      ],
                      "referencedDeclaration": 1937,
                      "src": "2123:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 190,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2123:77:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 191,
                  "nodeType": "ExpressionStatement",
                  "src": "2123:77:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 193,
                            "name": "dependencyAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 162,
                            "src": "2214:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 194,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isContract",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1692,
                          "src": "2214:28:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$bound_to$_t_address_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 195,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2214:30:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "446570656e64656e63696573206d75737420626520636f6e747261637473",
                        "id": 196,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2246:32:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b016cb84b210c72a778151fcd6d98e402db69e21e2a5d837e60b2ff95435b9f4",
                          "typeString": "literal_string \"Dependencies must be contracts\""
                        },
                        "value": "Dependencies must be contracts"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b016cb84b210c72a778151fcd6d98e402db69e21e2a5d837e60b2ff95435b9f4",
                          "typeString": "literal_string \"Dependencies must be contracts\""
                        }
                      ],
                      "id": 192,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1936,
                        1937
                      ],
                      "referencedDeclaration": 1937,
                      "src": "2206:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 197,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2206:73:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 198,
                  "nodeType": "ExpressionStatement",
                  "src": "2206:73:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 203,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "2293:28:0",
                        "subExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 200,
                            "name": "_takenDependencyNames",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66,
                            "src": "2294:21:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_$_t_bool_$",
                              "typeString": "mapping(string memory => bool)"
                            }
                          },
                          "id": 202,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 201,
                            "name": "name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 158,
                            "src": "2316:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_calldata_ptr",
                              "typeString": "string calldata"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2294:27:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "476976656e20646570656e64656e6379206e616d6520697320616c72656164792072656769737465726564",
                        "id": 204,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2323:45:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d8cbd8b5163c68134006617745c017f075cf87b0453f65bd9a03696c21aa0c9b",
                          "typeString": "literal_string \"Given dependency name is already registered\""
                        },
                        "value": "Given dependency name is already registered"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d8cbd8b5163c68134006617745c017f075cf87b0453f65bd9a03696c21aa0c9b",
                          "typeString": "literal_string \"Given dependency name is already registered\""
                        }
                      ],
                      "id": 199,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1936,
                        1937
                      ],
                      "referencedDeclaration": 1937,
                      "src": "2285:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 205,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2285:84:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 206,
                  "nodeType": "ExpressionStatement",
                  "src": "2285:84:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 211,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 207,
                        "name": "_takenDependencyNames",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 66,
                        "src": "2376:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_string_memory_$_t_bool_$",
                          "typeString": "mapping(string memory => bool)"
                        }
                      },
                      "id": 209,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 208,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 158,
                        "src": "2398:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2376:27:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 210,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2406:4:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "2376:34:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 212,
                  "nodeType": "ExpressionStatement",
                  "src": "2376:34:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 221,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 213,
                        "name": "_registry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62,
                        "src": "2416:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Dependency_$58_storage_$",
                          "typeString": "mapping(string memory => struct Vouching.Dependency storage ref)"
                        }
                      },
                      "id": 215,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 214,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 158,
                        "src": "2426:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2416:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Dependency_$58_storage",
                        "typeString": "struct Vouching.Dependency storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 217,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 160,
                          "src": "2445:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 218,
                          "name": "dependencyAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 162,
                          "src": "2452:17:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 219,
                          "name": "initialStake",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 164,
                          "src": "2471:12:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 216,
                        "name": "Dependency",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 58,
                        "src": "2434:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_Dependency_$58_storage_ptr_$",
                          "typeString": "type(struct Vouching.Dependency storage pointer)"
                        }
                      },
                      "id": 220,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2434:50:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Dependency_$58_memory",
                        "typeString": "struct Vouching.Dependency memory"
                      }
                    },
                    "src": "2416:68:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Dependency_$58_storage",
                      "typeString": "struct Vouching.Dependency storage ref"
                    }
                  },
                  "id": 222,
                  "nodeType": "ExpressionStatement",
                  "src": "2416:68:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 226,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 160,
                        "src": "2515:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 227,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1958,
                        "src": "2522:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vouching_$416",
                          "typeString": "contract Vouching"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 228,
                        "name": "initialStake",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 164,
                        "src": "2528:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_Vouching_$416",
                          "typeString": "contract Vouching"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 223,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70,
                        "src": "2491:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$1353",
                          "typeString": "contract ERC20"
                        }
                      },
                      "id": 225,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1655,
                      "src": "2491:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$1612_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1612_$",
                        "typeString": "function (contract IERC20,address,address,uint256)"
                      }
                    },
                    "id": 229,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2491:50:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 230,
                  "nodeType": "ExpressionStatement",
                  "src": "2491:50:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 235,
                                "name": "name",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 158,
                                "src": "2598:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 233,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1920,
                                "src": "2581:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 234,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encodePacked",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "2581:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 236,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2581:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 232,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1927,
                          "src": "2571:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                            "typeString": "function () pure returns (bytes32)"
                          }
                        },
                        "id": 237,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2571:33:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 238,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 158,
                        "src": "2606:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 239,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 160,
                        "src": "2612:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 240,
                        "name": "dependencyAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 162,
                        "src": "2619:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 241,
                        "name": "initialStake",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 164,
                        "src": "2638:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 231,
                      "name": "DependencyCreated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26,
                      "src": "2553:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_string_memory_ptr_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes32,string memory,address,address,uint256)"
                      }
                    },
                    "id": 242,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2553:98:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 243,
                  "nodeType": "EmitStatement",
                  "src": "2548:103:0"
                }
              ]
            },
            "documentation": null,
            "id": 245,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "create",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 165,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 158,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 245,
                  "src": "1860:11:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 157,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1860:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 160,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 245,
                  "src": "1873:13:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 159,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1873:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 162,
                  "name": "dependencyAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 245,
                  "src": "1888:25:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 161,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1888:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 164,
                  "name": "initialStake",
                  "nodeType": "VariableDeclaration",
                  "scope": 245,
                  "src": "1915:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 163,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1915:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1859:77:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 166,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1946:0:0"
            },
            "scope": 416,
            "src": "1844:812:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 277,
              "nodeType": "Block",
              "src": "2753:169:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 260,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 256,
                          "name": "newOwner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 249,
                          "src": "2767:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 258,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2787:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 257,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2779:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 259,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2779:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2767:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e6577206f776e657220616464726573732063616e6e6f74206265207a65726f",
                        "id": 261,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2791:34:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_33b22e5cbe199f768d9bc52d4527a32749f4d873f96100bb3bdb7ac950715aaa",
                          "typeString": "literal_string \"New owner address cannot be zero\""
                        },
                        "value": "New owner address cannot be zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_33b22e5cbe199f768d9bc52d4527a32749f4d873f96100bb3bdb7ac950715aaa",
                          "typeString": "literal_string \"New owner address cannot be zero\""
                        }
                      ],
                      "id": 255,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1936,
                        1937
                      ],
                      "referencedDeclaration": 1937,
                      "src": "2759:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 262,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2759:67:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 263,
                  "nodeType": "ExpressionStatement",
                  "src": "2759:67:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 269,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 264,
                          "name": "_registry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62,
                          "src": "2832:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Dependency_$58_storage_$",
                            "typeString": "mapping(string memory => struct Vouching.Dependency storage ref)"
                          }
                        },
                        "id": 266,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 265,
                          "name": "name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 247,
                          "src": "2842:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_calldata_ptr",
                            "typeString": "string calldata"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2832:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Dependency_$58_storage",
                          "typeString": "struct Vouching.Dependency storage ref"
                        }
                      },
                      "id": 267,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 53,
                      "src": "2832:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 268,
                      "name": "newOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 249,
                      "src": "2856:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2832:32:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 270,
                  "nodeType": "ExpressionStatement",
                  "src": "2832:32:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 272,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1933,
                          "src": "2896:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 273,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2896:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 274,
                        "name": "newOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 249,
                        "src": "2908:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 271,
                      "name": "OwnershipTransferred",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14,
                      "src": "2875:20:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 275,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2875:42:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 276,
                  "nodeType": "EmitStatement",
                  "src": "2870:47:0"
                }
              ]
            },
            "documentation": null,
            "id": 278,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 252,
                    "name": "name",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 247,
                    "src": "2747:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_calldata_ptr",
                      "typeString": "string calldata"
                    }
                  }
                ],
                "id": 253,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 251,
                  "name": "onlyDependencyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 87,
                  "src": "2727:19:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_string_memory_ptr_$",
                    "typeString": "modifier (string memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2727:25:0"
              }
            ],
            "name": "transferOwnership",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 250,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 247,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 278,
                  "src": "2687:11:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 246,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2687:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 249,
                  "name": "newOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 278,
                  "src": "2700:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 248,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2700:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2686:31:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 254,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2753:0:0"
            },
            "scope": 416,
            "src": "2660:262:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 320,
              "nodeType": "Block",
              "src": "3005:184:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 299,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 288,
                          "name": "_registry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62,
                          "src": "3011:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Dependency_$58_storage_$",
                            "typeString": "mapping(string memory => struct Vouching.Dependency storage ref)"
                          }
                        },
                        "id": 290,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 289,
                          "name": "name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 280,
                          "src": "3021:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_calldata_ptr",
                            "typeString": "string calldata"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3011:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Dependency_$58_storage",
                          "typeString": "struct Vouching.Dependency storage ref"
                        }
                      },
                      "id": 291,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "stake",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 57,
                      "src": "3011:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 297,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 282,
                          "src": "3061:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 292,
                              "name": "_registry",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62,
                              "src": "3035:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Dependency_$58_storage_$",
                                "typeString": "mapping(string memory => struct Vouching.Dependency storage ref)"
                              }
                            },
                            "id": 294,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 293,
                              "name": "name",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 280,
                              "src": "3045:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_calldata_ptr",
                                "typeString": "string calldata"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3035:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Dependency_$58_storage",
                              "typeString": "struct Vouching.Dependency storage ref"
                            }
                          },
                          "id": 295,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "stake",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 57,
                          "src": "3035:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 296,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 881,
                        "src": "3035:25:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 298,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3035:33:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3011:57:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 300,
                  "nodeType": "ExpressionStatement",
                  "src": "3011:57:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 304,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1933,
                          "src": "3098:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 305,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3098:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 306,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1958,
                        "src": "3110:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vouching_$416",
                          "typeString": "contract Vouching"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 307,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 282,
                        "src": "3116:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_Vouching_$416",
                          "typeString": "contract Vouching"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 301,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70,
                        "src": "3074:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$1353",
                          "typeString": "contract ERC20"
                        }
                      },
                      "id": 303,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1655,
                      "src": "3074:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$1612_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1612_$",
                        "typeString": "function (contract IERC20,address,address,uint256)"
                      }
                    },
                    "id": 308,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3074:49:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 309,
                  "nodeType": "ExpressionStatement",
                  "src": "3074:49:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 314,
                                "name": "name",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 280,
                                "src": "3169:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 312,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1920,
                                "src": "3152:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 313,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encodePacked",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "3152:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 315,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3152:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 311,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1927,
                          "src": "3142:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                            "typeString": "function () pure returns (bytes32)"
                          }
                        },
                        "id": 316,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3142:33:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 317,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 282,
                        "src": "3177:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 310,
                      "name": "Vouched",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32,
                      "src": "3134:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes32,uint256)"
                      }
                    },
                    "id": 318,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3134:50:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 319,
                  "nodeType": "EmitStatement",
                  "src": "3129:55:0"
                }
              ]
            },
            "documentation": null,
            "id": 321,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 285,
                    "name": "name",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 280,
                    "src": "2999:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_calldata_ptr",
                      "typeString": "string calldata"
                    }
                  }
                ],
                "id": 286,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 284,
                  "name": "onlyDependencyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 87,
                  "src": "2979:19:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_string_memory_ptr_$",
                    "typeString": "modifier (string memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2979:25:0"
              }
            ],
            "name": "vouch",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 283,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 280,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 321,
                  "src": "2941:11:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 279,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2941:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 282,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 321,
                  "src": "2954:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 281,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2954:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2940:29:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 287,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3005:0:0"
            },
            "scope": 416,
            "src": "2926:263:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 373,
              "nodeType": "Block",
              "src": "3274:332:0",
              "statements": [
                {
                  "assignments": [
                    332
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 332,
                      "name": "remainingStake",
                      "nodeType": "VariableDeclaration",
                      "scope": 374,
                      "src": "3280:22:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 331,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3280:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 340,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 338,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 325,
                        "src": "3331:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 333,
                            "name": "_registry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62,
                            "src": "3305:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Dependency_$58_storage_$",
                              "typeString": "mapping(string memory => struct Vouching.Dependency storage ref)"
                            }
                          },
                          "id": 335,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 334,
                            "name": "name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 323,
                            "src": "3315:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_calldata_ptr",
                              "typeString": "string calldata"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3305:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Dependency_$58_storage",
                            "typeString": "struct Vouching.Dependency storage ref"
                          }
                        },
                        "id": 336,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "stake",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 57,
                        "src": "3305:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 337,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 857,
                      "src": "3305:25:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 339,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3305:33:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3280:58:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 344,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 342,
                          "name": "remainingStake",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 332,
                          "src": "3352:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 343,
                          "name": "_minimumStake",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 68,
                          "src": "3370:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3352:31:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "52656d61696e696e67207374616b65206d75737420626520657175616c206f722067726561746572207468616e206d696e696d756d207374616b65",
                        "id": 345,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3385:61:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_40637db8c4d1d55e66a47ee76369669aa177f726905ec14c516c0d2ff1acaf54",
                          "typeString": "literal_string \"Remaining stake must be equal or greater than minimum stake\""
                        },
                        "value": "Remaining stake must be equal or greater than minimum stake"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_40637db8c4d1d55e66a47ee76369669aa177f726905ec14c516c0d2ff1acaf54",
                          "typeString": "literal_string \"Remaining stake must be equal or greater than minimum stake\""
                        }
                      ],
                      "id": 341,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1936,
                        1937
                      ],
                      "referencedDeclaration": 1937,
                      "src": "3344:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 346,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3344:103:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 347,
                  "nodeType": "ExpressionStatement",
                  "src": "3344:103:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 353,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 348,
                          "name": "_registry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62,
                          "src": "3454:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Dependency_$58_storage_$",
                            "typeString": "mapping(string memory => struct Vouching.Dependency storage ref)"
                          }
                        },
                        "id": 350,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 349,
                          "name": "name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 323,
                          "src": "3464:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_calldata_ptr",
                            "typeString": "string calldata"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3454:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Dependency_$58_storage",
                          "typeString": "struct Vouching.Dependency storage ref"
                        }
                      },
                      "id": 351,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "stake",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 57,
                      "src": "3454:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 352,
                      "name": "remainingStake",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 332,
                      "src": "3478:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3454:38:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 354,
                  "nodeType": "ExpressionStatement",
                  "src": "3454:38:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 358,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1933,
                          "src": "3518:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 359,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3518:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 360,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 325,
                        "src": "3530:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 355,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70,
                        "src": "3498:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$1353",
                          "typeString": "contract ERC20"
                        }
                      },
                      "id": 357,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1634,
                      "src": "3498:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$1612_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1612_$",
                        "typeString": "function (contract IERC20,address,uint256)"
                      }
                    },
                    "id": 361,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3498:39:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 362,
                  "nodeType": "ExpressionStatement",
                  "src": "3498:39:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 367,
                                "name": "name",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 323,
                                "src": "3586:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 365,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1920,
                                "src": "3569:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 366,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encodePacked",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "3569:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 368,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3569:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 364,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1927,
                          "src": "3559:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                            "typeString": "function () pure returns (bytes32)"
                          }
                        },
                        "id": 369,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3559:33:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 370,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 325,
                        "src": "3594:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 363,
                      "name": "Unvouched",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 38,
                      "src": "3549:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes32,uint256)"
                      }
                    },
                    "id": 371,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3549:52:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 372,
                  "nodeType": "EmitStatement",
                  "src": "3544:57:0"
                }
              ]
            },
            "documentation": null,
            "id": 374,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 328,
                    "name": "name",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 323,
                    "src": "3268:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_calldata_ptr",
                      "typeString": "string calldata"
                    }
                  }
                ],
                "id": 329,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 327,
                  "name": "onlyDependencyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 87,
                  "src": "3248:19:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_string_memory_ptr_$",
                    "typeString": "modifier (string memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3248:25:0"
              }
            ],
            "name": "unvouch",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 326,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 323,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 374,
                  "src": "3210:11:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 322,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3210:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 325,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 374,
                  "src": "3223:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 324,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3223:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3209:29:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 330,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3274:0:0"
            },
            "scope": 416,
            "src": "3193:413:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 414,
              "nodeType": "Block",
              "src": "3674:399:0",
              "statements": [
                {
                  "assignments": [
                    383
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 383,
                      "name": "reimbursedAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 415,
                      "src": "3732:24:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 382,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3732:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 391,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 389,
                        "name": "_minimumStake",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 68,
                        "src": "3785:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 384,
                            "name": "_registry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62,
                            "src": "3759:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Dependency_$58_storage_$",
                              "typeString": "mapping(string memory => struct Vouching.Dependency storage ref)"
                            }
                          },
                          "id": 386,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 385,
                            "name": "name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 376,
                            "src": "3769:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_calldata_ptr",
                              "typeString": "string calldata"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3759:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Dependency_$58_storage",
                            "typeString": "struct Vouching.Dependency storage ref"
                          }
                        },
                        "id": 387,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "stake",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 57,
                        "src": "3759:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 388,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 857,
                      "src": "3759:25:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 390,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3759:40:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3732:67:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 395,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "3927:22:0",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 392,
                        "name": "_registry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62,
                        "src": "3934:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Dependency_$58_storage_$",
                          "typeString": "mapping(string memory => struct Vouching.Dependency storage ref)"
                        }
                      },
                      "id": 394,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 393,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 376,
                        "src": "3944:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3934:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Dependency_$58_storage",
                        "typeString": "struct Vouching.Dependency storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 396,
                  "nodeType": "ExpressionStatement",
                  "src": "3927:22:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 400,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1933,
                          "src": "3976:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 401,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3976:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 402,
                        "name": "reimbursedAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 383,
                        "src": "3988:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 397,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70,
                        "src": "3956:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$1353",
                          "typeString": "contract ERC20"
                        }
                      },
                      "id": 399,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1634,
                      "src": "3956:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$1612_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1612_$",
                        "typeString": "function (contract IERC20,address,uint256)"
                      }
                    },
                    "id": 403,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3956:49:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 404,
                  "nodeType": "ExpressionStatement",
                  "src": "3956:49:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 409,
                                "name": "name",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 376,
                                "src": "4061:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 407,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1920,
                                "src": "4044:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 408,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encodePacked",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "4044:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 410,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4044:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 406,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1927,
                          "src": "4034:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                            "typeString": "function () pure returns (bytes32)"
                          }
                        },
                        "id": 411,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4034:33:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 405,
                      "name": "DependencyRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42,
                      "src": "4016:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32)"
                      }
                    },
                    "id": 412,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4016:52:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 413,
                  "nodeType": "EmitStatement",
                  "src": "4011:57:0"
                }
              ]
            },
            "documentation": null,
            "id": 415,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 379,
                    "name": "name",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 376,
                    "src": "3668:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_calldata_ptr",
                      "typeString": "string calldata"
                    }
                  }
                ],
                "id": 380,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 378,
                  "name": "onlyDependencyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 87,
                  "src": "3648:19:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_string_memory_ptr_$",
                    "typeString": "modifier (string memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3648:25:0"
              }
            ],
            "name": "remove",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 377,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 376,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 415,
                  "src": "3626:11:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 375,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3626:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3625:13:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 381,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3674:0:0"
            },
            "scope": 416,
            "src": "3610:463:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 417,
        "src": "306:3770:0"
      }
    ],
    "src": "0:4078:0"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "2.0.1",
  "updatedAt": "2018-12-15T05:05:31.540Z"
}